エラー
unresolved external symbol
プロジェクトのビルド中に依存関係を受け取りました。以前はこれが問題ではなかった理由を理解したいと思います。
背景情報
プロジェクトの依存関係グラフは次のようになります。
FRCUserProgram.exe
|--wpilibC++Sim.lib
|--gazebo.exe
|-- gazebo.lib
|-- gazebo_common.lib (uses freeimage in Image.cc.obj)
|-- FreeImaged.lib
そのため、FreeImage のヘッダー ライブラリと静的ライブラリがあります。
FreeImaged.lib に対して明示的に静的にリンクして、gazebo_common をビルドします。
私は Gazebo を構築し、FreeImage.libとGazebo_common.libに対して明示的に静的にリンクします。
私はwpilibC++Simをビルドし、明示的にgazebo.libとgazebo_common.libに対して静的にリンクしますが、FreeImaged.libにはリンクしません
私は自分の FRCUserProgram をビルドし、gazebo.lib、gazebo_common.lib、および FreeImaged.lib に対して明示的に静的にリンクします。
ただし、これを行うと、 から取得および取得unresolved external symbol __imp_FreeImage_Initialize
されImage.cc.obj
ます。
調べるためにやったこと
ここで、魔法のコマンドを使用して、シンボルではなくシンボルが含まれているdumpbin /SYMBOLS
ことを明確に確認できます。__imp_ は、DLL からインポートされることを意図した関数であることを示していることを知っています。ただし、すべてが静的にリンクされている必要があるため、そのシンボルを入れるものは何でも間違っていました。FreeImaged.lib
FreeImage_Initialize
__imp_FreeImage_Initialize
Image.cc.obj
これを修正するにはFRCUserProgram.exe
、FreeImage の動的ライブラリにリンクするか、FREEIMAGE_LIB
定義された変数を使用して Gazebo_common (したがって Image.cc.obj) を再構築します。これにより、シンボルの前に __declspec(import) と __imp_ が追加されなくなります。 .
何よりも、どこにも Dll はありません。存在しません。私はそれを持っていません。静的ライブラリを使用しようとしていますFreeImaged.lib
。したがって、正しいシンボルが組み込まれるFREEIMAGE_LIB
ように、 を定義するのが正しいと思います。Image.cc.obj
もちろんこれは機能しますが、以前は問題にならなかった理由がわかりません!
質問:
これらのシンボルは、gazebo.exe ではなく FRCUserProgram.exe に対して解決する必要があるのはなぜですか?