私はいくつかのサードパーティ製アプリケーションで使用するライブラリ(mylibraryと言う)を開発しています。私のライブラリはcmake(CentOS 7およびg ++ 4.8)でビルドおよびコンパイルされており、スレッド、ログ、システム、ファイルシステム、date_time(バージョン1.61.0)などのいくつかのブーストライブラリを使用しています。私のライブラリをテストするために、私は非常に単純なテスターを開発しました(テスターと呼んでみましょう)。ポイントは、私の図書館はうまく構築され、リンクされていますが、テスターはできません。私は以下のcmakeのファイルの内容を表示してみましょうてMyLibrary建物に専用されているメインcmakeのファイルでブーストライブラリを使用する静的ライブラリにリンクすると、cmakeのリンクエラーが発生します
を、私はこのようにブースト追加しました:ライブラリを追加するには
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})
を、私はこれらを使用していますコードの行:このcmakeのファイルの最後の行で
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})
は、私はこのように、テスターのディレクトリを追加しました:
if(ENABLE_TESTER)
message(STATUS "tester is enabled and will be built")
add_subdirectory (tester)
endif(ENABLE_TESTER)
とテスターのために、私はこのような非常に単純なcmakeのファイルを持っている:私は私のプロジェクトをビルドするたびに、私のライブラリが正常にビルドされ、今
add_executable(tester tester.cpp)
message(STATUS , "Boost_libraries are ${Boost_LIBRARIES}")
target_link_libraries(tester mylibrary ${Boost_LIBRARIES})
を、しかし、テスターがリンクされようとしているとき、私が直面していますこのようなリンカエラーがたくさん:
../../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&)'
ポイントは、私はテスターを結ぶ前に、変数Boost_LIBRARIESを印刷しているし、すべてがうまくようだということです。
mylibraryのcmakeコードを追加できますか? – wasthishelpful
これを確認しました[回答](http://stackoverflow.com/a/35853967/5781248)? –
@wasthishelpful私はコードを追加しました。 – hsalimi