0

エラー

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.libFreeImage_Initialize__imp_FreeImage_InitializeImage.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 に対して解決する必要があるのはなぜですか?

4

0 に答える 0