1

Core (静的または DLL としてコンパイル可能)、Graphics (静的または DLL としてコンパイル可能 - Ogre を扱う)、Physics (ライセンスのために静的としてのみコンパイル可能 - Havok)の 3 つの異なるライブラリを使用しています。その後、プロジェクトは必要に応じてライブラリを組み合わせて使用​​します。Physics部分はGraphicsCoreの一部の機能に依存していますが、GraphicsはCoreの一部の機能に依存しています。プロジェクトは、デバッグとリリースで静的にリンクされたすべてのライブラリで正常に動作します。Coreの動的にリンクされたライブラリを使用すると、次のエラーが発生します。グラフィックスですが、静的にリンクされた物理ライブラリです。

エラー 1 エラー LNK2005: "public: unsigned int __thiscall OgreFW::FwErrorLog::GetError(void)" (?GetError@FwErrorLog@OgreFW@@QAEIXZ) は既に FwCore_d_dll.lib(FwCore_d.dll) で定義されています FwHavok_d.lib

エラーの意味はわかりますが、これを回避する方法がわかりません。ライブラリがこのように相互に依存しており、物理エンジン (Havok) のライセンスで静的リンクしか許可されていない場合、設計を再考する必要がありますか (これは大きな問題です :( ) またはそれを回避する方法はありますか?

ありがとう

EDIT:すべてのライブラリがMDdでコンパイルされていることを確認するためにすでにチェックしました

EDIT2:使用できます/FORCE:MULTIPLEが、それは問題を解決するのではなく隠しています

EDIT3: いくつかの編集をお詫びします。関数GetError()はヘッダーで定義されています。ソース ファイルに配置すると、リンク エラーはなくなります。何故ですか?

4

2 に答える 2

0

解決策を見つけましたが、なぜそれが機能するのかわかりません。ヘッダーで定義されたすべての関数(1つだけではなく)がリンクエラーを引き起こした場合は説明がありますが、いいえ、2つしかありません。

とにかく、解決策は関数の定義をソースファイルに入れることです。なぜそれが機能するのですか?誰かがそれについての説明を持っているなら、それは素晴らしいでしょう。

于 2010-09-08T04:41:38.697 に答える
0

「プロジェクトは、デバッグとリリースで静的にリンクされたすべてのライブラリで正常に動作します。」

それがあなたの答えではありませんか?このシナリオでは、動的リンクにはどのような利点がありますか?

于 2010-09-07T02:17:25.220 に答える