Ich entwickle eine Bibliothek (sagen wir mylibrary), die von einigen Anwendungen von Drittanbietern verwendet werden soll. Meine Bibliothek wird von cmake (auf CentOS 7 und g ++ 4.8) erstellt und kompiliert und verwendet einige Boost-Bibliotheken wie thread, log, system, filesystem und date_time (Version 1.61.0). Um meine Lib zu testen, habe ich einen sehr einfachen Tester entwickelt (nennen wir es Tester). Der Punkt ist, dass meine Bibliothek erfolgreich aufgebaut und verlinkt werden kann, der Tester aber nicht. Lassen Sie zeigen mir den Inhalt cmake Dateien unter:Die Verknüpfung mit einer statischen Bibliothek, die Boost-Bibliotheken verwendet, führt zu Verknüpfungsfehlern in cmake
Im Haupt cmake-Datei, die für den Aufbau mylibrary gewidmet ist, habe ich zusätzlichen Schub auf diese Weise:
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
SET(Boost_ADDITIONAL_VERSIONS "1.51.0" "1.52.0"
"1.53.0" "1.54.0" "1.55.0" "1.56.0" "1.57.0" "1.58.0"
"1.60.0" "1.61.0" "1.61.0" "1.62.0" "1.63.0" "1.64.0")
find_package(Threads)
find_package(Boost REQUIRED)
find_package(Boost 1.61.0 COMPONENTS thread log log_setup filesystem system date_time)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
die Bibliothek hinzuzufügen, habe ich verwendet diese Codezeilen:
set(MYLIBRARY_SRC
${MYLIBRARY_SOURCE_DIR}/src/folder1/File1.cpp
${MYLIBRARY_SOURCE_DIR}/src/folder2/File2.cpp
${MYLIBRARY_SOURCE_DIR}/src/folder3/File3.cpp)
add_library (mylibrary ${MYLIBRARY_SRC})
in den letzten Zeilen dieser cmake Dateien habe ich die Tester Verzeichnis auf diese Weise hinzugefügt:
if(ENABLE_TESTER)
message(STATUS "tester is enabled and will be built")
add_subdirectory (tester)
endif(ENABLE_TESTER)
und für den Tester, habe ich eine sehr einfache cmake-Datei wie folgt:
add_executable(tester tester.cpp)
message(STATUS , "Boost_libraries are ${Boost_LIBRARIES}")
target_link_libraries(tester mylibrary ${Boost_LIBRARIES})
Nun, wenn ich mein Projekt zu bauen, meine Bibliothek erfolgreich gebaut, aber wenn der Tester, das Gesicht zu verknüpfe geht I viele Linkerfehler wie folgt aus:
../../lib/mylibrary.a (Logger.cpp.o): In function `void boost::log::v2s_mt_posix::basic_formatting_ostream<char, std::char_traits<char>, std::allocator<char> >::aligned_write<wchar_t>(wchar_t const*, long)':
/home/john/local/include/boost/log/utility/formatting_ostream.hpp:702: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)'
/home/john/local/include/boost/log/utility/formatting_ostream.hpp:696: undefined reference to `boost::log::v2s_mt_posix::aux::code_convert(wchar_t const*, unsigned long, std::string&, std::locale const&)'
der Punkt ist, dass ich die Boost_LIBRARIES vor Variable gedruckt Verknüpfung der Tester und alles scheint in Ordnung.
Können Sie bitte den cmake-Code für mylibrary hinzufügen? – wasthishelpful
Haben Sie diese [Antwort] (http://stackoverflow.com/a/35853967/5781248) überprüft? –
@washishelfful Ich habe den Code hinzugefügt. – hsalimi