10

プロジェクトでブーストを使用しています。ここからコンパイル済みのバイナリをダウンロードしました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

4

4 に答える 4

1

エラーが発生した場合に試す別のアイデア/解決策error LNK1104: cannot open file 'libboost_date_time-*.lib'

私たちのプロジェクトでは、boost/date_time.hppファイルを含めます。BOOST_ALL_NO_LIBプロジェクト設定で BOOST_ALL_DYN_LINK の代わりに定数を定義して、 boost がリンク先のライブラリを自動的に選択しないようにします。このオプションの詳細については、Boost のドキュメントを参照してください。

したがってBOOST_ALL_NO_LIB、Project Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions を追加して、このリンカ エラーがなくなるかどうかを確認できます。

于 2014-11-20T15:08:51.723 に答える
0

自分に質問します。#define BOOST_ALL_DYN_LINK のコメントを外す必要があります (説明を参照)

于 2013-04-19T08:19:08.443 に答える
0

まず、質問を修正する必要があると思います。DLLということですか (との違いは既にご存じだと思いますLIB)

  • libboost_thread-vc110-mt-1_52.lib
  • boost_thread-vc110-mt-1_52。dll

また

  • libboost_thread-vc110-mt-1_52.lib
  • boost_thread-vc110-mt-1_52。ライブラリ

とにかく、問題は static( libboost_thread-vc110-mt-1_52.lib) と shared( boost_thread-vc110-mt-1_52.lib) ブースト ライブラリを混在させているようです。しかし、作業環境とプラットフォームの詳細がなければ、正確な解決策を見つけることはできません. で作業している場合はVisual Studioright click on project file> properties> linker> input>に移動して、そこignore specific libraryに追加libboost_thread-vc110-mt-1_52.libして試してみてください。

于 2013-04-17T09:59:49.380 に答える