पर सीएमके के साथ साझा लाइब्रेरी में बढ़ावा जोड़ने को जोड़ने के लिए मेरे पास एक प्रोजेक्ट और एक प्रोजेक्ट लाइब्रेरी है। साझा लाइब्रेरी बूस्ट लाइब्रेरी का उपयोग करती है। निष्पादन योग्य साझा पुस्तकालय olny का उपयोग करता है।लिनक्स
tilenet/ <-- Project
ttest/ <-- Test (executable)
CMakeLists.txt
tilenet/ <-- The shared library
CMakeLists.txt
CMakeLists.txt <-- Root CMake-file
रूट CMake-फ़ाइल:
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)
ttest/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}
)
(मैं कुछ महत्वहीन काट लिया सामान)
खिड़कियों पर यह ठीक काम करता है (लेकिन वहाँ मैं CMake बिना VisuelStudio का उपयोग करें), लेकिन लिनक्स पर मैं जोड़ने त्रुटियों निम्नलिखित हो:
../../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
मैं दिए गए विकल्पों के साथ संयोजन का एक बहुत कोशिश की है, लेकिन मैं नहीं था इसे जोड़ने में सक्षम क्या आप जानते हैं कि मैंने गलतियां कहाँ की हैं? यह पहली बार है जब मैंने गंभीरता से सीएमके का उपयोग किया है :)
ठीक अब मैं सब कुछ संकलन कर सकते हैं (और एक विभाजन गलती मिल;) nerver मन) लेकिन मैं ttest निष्पादन को बढ़ावा लिंक करने के लिए की है। साझा पुस्तकालय के अंदर बढ़ावा छिपाना संभव है? – Databyte
सुनिश्चित नहीं है कि आपका क्या मतलब है। एक बार जब आप 'tilenet' की निर्भरता के रूप में बढ़ावा libs निर्दिष्ट करते हैं, जब भी आप किसी अन्य लक्ष्य की निर्भरता के रूप में 'tilenet' निर्दिष्ट करते हैं, तो सीएमके स्वचालित रूप से आगे निर्भरताओं के रूप में बढ़ावा libs को पहचानता है। दूसरे शब्दों में, किसी अन्य 'target_link_libraries' कॉल में' $ {BOOST_LIBRARIES} 'को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता नहीं है यदि इसमें पहले से ही' tilenet' है। – Fraser
ठीक है अच्छा लगता है धन्यवाद – Databyte