Orbiter と呼ばれる宇宙飛行シミュレータのアドオンを開発しています: http://orbit.medphys.ucl.ac.uk/
プラグインを dll ファイルとして受け入れます。最近、Bullet 物理ライブラリも使用するプラグインを作成しました。dll に静的にリンクされているため、弾丸ライブラリ自体は dll ではなく、プラグインにコンパイルされています。Bullet は、リリース用のマルチスレッド (/MT) オプションとデバッグ用のマルチスレッド デバッグ (/MTd) オプションでコンパイルされています。
次に、Boost のスレッドを使用したいと思います。そこで、Boost Pro インストーラーから 2 つの静的オプションを選択して、静的な Boost ライブラリをインストールしました。これらの静的ライブラリを使用して、Win 32 アプリケーションを正常に作成できました。アプリケーションはマルチスレッド (/MT) も使用しました。したがって、フラグに不一致がないことはわかっています。
それでも、Bullet を含む Orbiter dll プラグイン プロジェクトに Boost を追加すると、リンク エラーが発生します。
1>------ ビルド開始: プロジェクト: バンプ、構成: Win32 をリリース ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): 警告 MSB8012: TargetPath(F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\ Bump.dll) は、リンカーの OutputFile プロパティ値 (F:\Orbiter\Modules\Plugin\Bump.dll) と一致しません。これにより、プロジェクトが正しくビルドされない可能性があります。これを修正するには、$(OutDir)、$(TargetName)、および $(TargetExt) プロパティ値が %(Link.OutputFile) で指定された値と一致していることを確認してください。
1>MSVCRT.lib(ti_inst.obj): エラー LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は LIBCMT.lib(typinfo で既に定義されています) .obj)
1>MSVCRT.lib(ti_inst.obj): エラー LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は LIBCMT で既に定義されています.lib(typinfo.obj) 1> ライブラリ F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\Bump.lib とオブジェクト F:\Orbiter\Orbitersdk\samples\BumpThreaded\Release\Bump.exp の作成
1>LINK: 警告 LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合します。/NODEFAULTLIB:library 1>......\Modules\Plugin\Bump.dll を使用: 致命的なエラー LNK1169: 1 つ以上の複数定義されたシンボルが見つかりました
========== ビルド: 0 成功、1 失敗、3 最新、0 スキップ ==========
他の質問で読んだことから、これは、アプリケーション内で使用されている 2 つのライブラリのフラグが一致していないことが原因である可能性があります。しかし、ここではそうではありません。Bullet と Boost はどちらも /MT でコンパイルされます。
また、ブーストは通常の win 32 アプリケーションで問題なく動作しますが、それを静的にリンクして dll を出力するときに問題が発生するのはなぜですか?
Visual Studio 2010 Express を使用しており、Windows 7 64 ビット システムを使用しています。
事前に助けてくれてありがとう:)