プロジェクトでブーストを使用しています。ここからコンパイル済みのバイナリをダウンロードしましたhttp://boost.teeks99.com/
リンクすると、次のようなエラーが表示されます。
Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" (?join@thread@boost@@QEAAXXZ) already defined in boost_thread-vc110-mt-1_52.lib(boost_thread-vc110-mt-1_52.dll) C:\Oleg\projects\MBClient\FastNativeAdapter\libboost_thread-vc110-mt-1_52.lib(thread.obj) FastNativeAdapter
なぜブーストにはlib
似たような名前のものが2つ含まれているのですか?それらの違いは何ですか?
- libboost_thread-vc110-mt-1_52.lib
- boost_thread-vc110-mt-1_52.lib
リンクエラーを修正するには?
upd自分でブーストをコンパイルしました。boost_1_53_0\stage\lib
リンカーにディレクトリを追加しました。このディレクトリには、実際には「各」ファイルの 3 つの「コピー」が含まれています。次に例を示します。
- boost_atomic-vc110-mt-1_53.dll
- boost_atomic-vc110-mt-1_53.lib
- libboost_atomic-vc110-mt-1_53.lib
したがって、コンパイラが主張していることは明らかです。どういうわけか、使用する lib ファイルのバージョンを理解できません。静的/動的リンクに関連している可能性がありますが、まだ解決策が見つかりません。私の問題はかなり一般的だと確信しているので、誰かが私に何をすべきかを提案してくれることを願っています.
フォルダーからすべての「libboost*」ファイルを削除しようとしましたが、次のようなエラーが表示されます。
Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'
フォルダーからすべての「boost*lib」ファイルを削除しようとしましたが、次のようなエラーが表示されます。
Error 15 error LNK1104: cannot open file 'boost_thread-vc110-mt-1_53.lib'
次に、コピーしboost_thread-vc110-mt-1_53.lib
て戻しましたが、次のような多くのエラーが表示されます。
Error 16 error LNK2005: "public: virtual __cdecl boost::detail::thread_data_base::~thread_data_base(void)" (??1thread_data_base@detail@boost@@UEAA@XZ) already defined in boost_thread-vc110-mt-1_53.lib(boost_thread-vc110-mt-1_53.dll)
したがって、「関数が既に定義されている」というコンパイラーの主張boost_thread-vc110-mt-1_53.lib
がある場合、それが欠落しているというコンパイラーの主張がない場合。boost_thread-vc110-mt-1_53.lib
おそらくどういうわけか、動的リンクと静的リンクを同時に使用するか、そのようなものを使用しますか?
upd2ここ#define BOOST_ALL_DYN_LINK
で提案されているようにコメントを外し、コードがコンパイルされるようになりました! 他に問題がないか調査中です。しかし、なぜコメントを外す必要があるのか 理解できなかったので、コメントは大歓迎です。#define BOOST_ALL_DYN_LINK