2013-04-17 25 views
7

私は自分のプロジェクトでboostを使っています。ブーストは、それらの間の違いは何ですので、似た名前の2つのlibが含まれているのはなぜリンクエラー:あいまいなlibboost * .lib対boost * .lib

Error 18 error LNK2005: "public: void __cdecl boost::thread::join(void)" ([email protected]@[email protected]@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

:私は、このようなエラーが表示されるリンクする際、私はここhttp://boost.teeks99.com/

からコンパイル済みのバイナリをダウンロードしましたか?

  • libboost_thread-vc110-MT-1_52.lib
  • boost_thread-vc110-MT-1_52.lib

エラーを結ぶ修正する方法は?

upd私は自分自身を強化しました。私はboost_1_53_0\stage\libディレクトリをリンカに追加しました。

  • boost_atomic-vc110-MT-1_53.dll
  • boost_atomic-vc110-MT-1_53.lib
  • libboost_atomic-vc110:このディレクトリには、実際には、例えば、 "それぞれの" ファイルの3 "コピー"、含まれています-mt-1_53.lib

コンパイラの主張は明らかです。どういうわけか、使用するlibファイルのバージョンを理解できません。それは静的/ダイナミックリンクと関連している可能性が高いですが、私はまだ解決策を見つけることができません。私の問題はかなり一般的なので、誰かが私に何をすべきかを示唆してくれることを願っています。

私はフォルダからすべての「libboost *」ファイルを削除しようとしましたが、その後、私は、このようなエラーが表示されます。 Error 15 error LNK1104: cannot open file 'libboost_date_time-vc110-mt-1_53.lib'

私はフォルダからすべての「ブースト* 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)" ([email protected]@[email protected]@[email protected]) 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コンパイラは、 "関数が既に定義されている"と主張しています。 Probaly何とか私は同じ時間に、またはそのような何かをディナミックと静的なリンクを使用していますか?

upd2#define BOOST_ALL_DYN_LINKのコメントをhereのコメントにして、今すぐコードをコンパイルしました!私は他のすべてがうまくいれば調査しています。しかし、私はなぜコメントを歓迎しますか#define BOOST_ALL_DYN_LINKのコメントを解除する必要があるか分からなかった。

+1

静的バージョンと動的バージョンの両方をBoost.Threadにリンクしようとしました。 'boost_thread'はdllのインポートライブラリ、' libboost_thread'は静的ライブラリです。 –

+0

なぜVSをリンクすると、この問題を解決するには? – javapowered

+1

通常、VSはこれをしません。そのため、あなたの設定に問題があります。 'BOOST_ALL_DYN_LINK'が定義されていますか? CRTと静的または動的にリンクしていますか(/ MTまたは/ MD)?上記のlibs(リンカー - >入力 - >付随依存関係または '#pragma comment(lib、...)')のいくつかを強制的にリンクしますか? –

答えて

0

自分でmyquestionを求めています。あなたはerror LNK1104: cannot open file 'libboost_date_time-*.lib'エラーヒットした場合 は、コメントを外します。#define BOOST_ALL_DYN_LINK(説明を参照)

5

編集:投稿の編集後に最初のステートメントが削除されたため、状況が変わりました。 (イゴールR.によって提供される)http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#library-namingに基づい

libboost_thread-vc110-MT-1_52.libは静的LIB(DLLが不要) boost_thread-vc110-MT-1_52です。libはDLLのインポートライブラリです

これらのうちの1つを使用する必要があります。

+0

いいえ、どちらも 'lib'ですが、もちろん私もdllを持っています – javapowered

+0

編集する前に、1つがdllとしてリストされていました。 2つのサイズを投稿してください。 1つが他のものよりもはるかに小さい場合、大きなものは静的ライブラリである可能性が高く、dllの必要性が排除されます。それらが近ければ、一方はデバッグバージョンであり、他方はリリースである。 – mah

+1

@mahブースト命名規則については、http://www.boost.org/doc/libs/1_53_0/more/getting_started/unix-variants.html#library-naming –

0

まず、あなたの質問を修正する必要があると思います。あなたが意味するか

  • libboost_thread-vc110-MT-1_52.lib
  • boost_thread-vc110-MT-1_52(私はあなたがすでにDLLLIBの違いを知っていると思います)。 DLL

又は

  • libboost_thread-vc110-MT-1_52.lib
  • boost_thread-vc110-MT-1_52。 libに

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

+0

私はおそらく私のバージョンは何らかの理由で壊れているかもしれないから、最初からブーストを構築しようとしています... – javapowered

0

しようとするもう一つのアイデア/ソリューションに必要があります。私たちのプロジェクトでは

を、我々はboost/date_time.hppファイルが含まれています。プロジェクト設定でBOOST_ALL_DYN_LINKの代わりに定数BOOST_ALL_NO_LIBを定義し、どのライブラリをリンクするかを自動的に選択しないようにboostに指示します。 このオプションの詳細については、Boost documentationを参照してください。

プロジェクトプロパティ - > C/C++ - >プリプロセッサ定義 - >プリプロセッサ定義にBOOST_ALL_NO_LIBを追加し、このリンカエラーがなくなるかどうかを確認できます。

関連する問題