2016-08-19 12 views
1

私はいくつかのサードパーティ製アプリケーションで使用するライブラリ(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を印刷しているし、すべてがうまくようだということです。

+0

mylibraryのcmakeコードを追加できますか? – wasthishelpful

+0

これを確認しました[回答](http://stackoverflow.com/a/35853967/5781248)? –

+0

@wasthishelpful私はコードを追加しました。 – hsalimi

答えて

0

さて、この問題の根本的な原因がまったく同じでin this question.

P.S.を依頼されましたJ.J.Hakalaはコメントでこの質問に答えました。私は彼に答えとして回答を書くように頼んだので、私はそれを受け入れることができます。しかし、彼はまだ答えていない、私は自分自身で答えを書くことにしました。この行為がS.O.の観点から間違っている場合、または司会者に私のQを複製するよう依頼する必要がある場合は、私に知らせてください。

関連する問題