Projemde bir yürütülebilir ve bir paylaşılan kitaplık var. Paylaşılan kitaplık, destek kitaplığını kullanır. çalıştırılabilir olny paylaşılan kütüphaneyi kullanır.Linux üzerinde CMake ile paylaşılan kitaplığa destek bağlama
tilenet/ <-- Project
ttest/ <-- Test (executable)
CMakeLists.txt
tilenet/ <-- The shared library
CMakeLists.txt
CMakeLists.txt <-- Root CMake-file
Kök CKağıt-file:
cmake_minimum_required(VERSION 2.6)
project(tilenet)
set(Boost_USE_STATIC_LIBS OFF) # I've already tried ON
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.49 COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
add_subdirectory(test)
add_subdirectory(tilenet)
t-testi/CMakeLists.txt
add_executable(ttest test.cpp)
target_link_libraries(ttest tilenet ${BOOST_LIBRARIES})
tilenet/CMakeLists.txt
include_directories("include")
set(tilenet_src "src/tilenet.cpp" ...)
add_library(tilenet SHARED ${tilenet_src})
target_link_libraries(tilenet
${SFML_LIBRARIES}
${BOOST_LIBRARIES}
)
(bazı önemsiz kestim şeyler)
Pencerelerde
sorunsuz çalışıyor (ama orada ben CMake olmadan VisuelStudio kullanın), ancak linux i bağlama hataları aşağıdaki olsun: Bana verilen seçenekleri ile kombinasyonlar çok denedim
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path_traits::convert(wchar_t const*, wchar_t const*, std::string&, std::codecvt<wchar_t, char, __mbstate_t> const&)'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path::operator/=(boost::filesystem3::path const&)'
../../lib/libtilenet.so: undefined reference to `boost::system::system_category()'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'
../../lib/libtilenet.so: undefined reference to `boost::system::generic_category()'
../../lib/libtilenet.so: undefined reference to `boost::filesystem3::path_traits::convert(char const*, char const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&, std::codecvt<wchar_t, char, __mbstate_t> const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [../bin/ttest] Error 1
make[1]: *** [test/CMakeFiles/ttest.dir/all] Error 2
make: *** [all] Error 2
ama olmadı bağlantı kurabilir. Hata yaptığımı biliyor musunuz? CMake'i ilk kez ciddi bir şekilde kullandığım ilk kez budur :)
ok şimdi herşeyi derlemek (ve bir segment hataya olsun;) nerver zihin) ama t-testi yürütülebilir destek bağlamak zorunda. Paylaşılan kütüphanenin içindeki desteği gizlemek mümkün mü? – Databyte
Ne demek istediğinden emin değilim. Bir başka deyişle, "tilenet" in bağımlılığı olarak libs'i bağımlı olarak belirledikten sonra, başka bir hedefin bağımlılığı olarak tilenet'i belirttiğinizde, CMake otomatik olarak artırma lib'lerini daha fazla bağımlılık olarak tanımlar. Diğer bir deyişle, zaten "tilenet" içeriyorsa, başka bir "target_link_libraries" çağrısında "$ {BOOST_LIBRARIES}" ifadesini açıkça listelemenize gerek yoktur. – Fraser
tamam kulağa hoş geliyor teşekkürler – Databyte