を後押し。私は最近Bullet物理ライブラリを使ったプラグインを作った。静的にdllにリンクされているので、箇条書きライブラリ自体はdllではなく、プラグインにコンパイルされています。 Bulletは、リリース用のマルチスレッド(/ MT)オプションとデバッグ用のマルチスレッドデバッグ(/ MTd)でコンパイルされました。は、私はオービターと呼ばれる宇宙飛行シミュレータのためのアドオンを開発弾丸物理学をコンパイルし、スタティックライブラリとして一緒
これでBoostのスレッドを使いたいと思います。そこでBoost Proインストーラから2つの静的オプションを選択して静的なBoostライブラリをインストールしました。これらの静的ライブラリを使用してWin32アプリケーションを正常に作成することができました。アプリケーションではマルチスレッド(/ MT)も使用されていました。だから私はフラグに不一致がないことを知っている。私も弾丸を持っている私のオービターのDLLプラグインプロジェクトにブーストを追加するとき、私はリンクエラーを取得しかし
、:
1> ------ビルド開始:プロジェクト:バンプ、構成:リリースWin32 ------
1 \ MSBuild \ Microsoft.Cpp \ v4.0 \ Microsoft.CppBuild.targets(990,5):警告MSB8012:TargetPath(F: \ Orbiter \ Modules \ Plugin \ Bump.dll)と一致しません。これは、Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.dllです。これにより、プロジェクトが正しくビルドされないことがあります。これを修正するには、$(OutDir)、$(TargetName)および$(TargetExt)のプロパティ値が%(Link.OutputFile)で指定された値と一致することを確認してください。
1> MSVCRT.LIB(ti_inst.obj):エラーLNK2005: "プライベート:__thiscall TYPE_INFO :: TYPE_INFO(constの& TYPE_INFOクラス)"(?? 0type_info @@ AAE @ ABV0 @@ Z)はすでにLIBCMTで定義されています.LIB(typinfo.obj)
1> MSVCRT.LIB(ti_inst.obj):エラーLNK2005: "プライベート:TYPE_INFO ::演算子=(CONST & TYPE_INFOクラス)& __thiscall TYPE_INFOクラス"(?? 4type_info @@ LIBCMT.lib(typinfo.obj)で既に定義されているファイル名:AAEAAV0 @ ABV0 @@ Z) 1ライブラリF:\ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.libとオブジェクトF:\ Orbiter \ Orbitersdk \ samples \ BumpThreaded \ Release \ Bump.exp
> LINK:警告LNK4098:defaultlib 'MSVCRT'は他のライブラリの使用と競合します。/NODEFAULTLIB:library 1> ...... \ Modules \ Plugin \ Bump.dll:致命的なエラーLNK1169:複数の定義済みシンボルが1つ以上見つかりました
==========ビルド: 0成功、1失敗、3最新、0スキップ==========
私が他の質問で読んだことは、2つのライブラリが使用されているための不一致フラグが原因である可能性がありますアプリケーション。しかし、ここではそうではありません。 BulletとBoostの両方が/ MTでコンパイルされます。
また、通常のwin32アプリケーションでも問題なく動作するので、静的にリンクしてdllを出力するのはなぜですか?
私はVisual Studio 2010 Expressを使用し、Windows 7 64ビットシステムを使用しています。
これは/ MTに設定しても同じエラーです。とにかく、Win32を使って自分自身をスレッドクラスとバリア、重要なセクションなどに巻き込んだので、後でBoostを統合しようとします。 –
あなたがリンクしているライブラリのうちの1つが、* fault *になっています。 '/ MD'で構築されたライブラリをどこかに持っています。あなたは、それをインストールするよりもむしろソースからブーストを構築し、ブーストをアンインストールすることができます。ビルドはかなり簡単で、実際にインストールする必要はありません。 – Fraser