ld.exe:DWARFエラー:オフセット101ceeで変数指定が見つかりませんでした

Aug 20 2020

次のメッセージで大量の出力が得られます(16進アドレスによってのみ区別されます)。

ld.exe: DWARF error: could not find variable specification at offset 101cee

一般的にこのエラーの意味は何ですか?

これは、リリースビルドをコンパイルするときには発生しません。ビルドのみをデバッグします。

回答

3 Chameleon Aug 20 2020 at 18:24

基本的に私はちょうど解決策を見つけました。StackOverflowでそのような質問が見つからなかったため、ここに配置します。私の立場が間違っている場合は答えてください。

ライブラリを静的ライブラリとしてコンパイルしますが、正しい#defineディレクティブがないと、エクスポートされたすべての関数に__declspec(dllexport)プレフィックスが付けられます。そのため、関数の名前はにfunctionなりました__imp_function

だから、それはただのundefined reference to __imp_functionでした。

しかし、なぜそれがそれほど暗号化されているのでしょうか?そして、なぜリリースビルドが正しくコンパイルされたのですか?

-fltoこれは、リンク時間の最適化を行い、ライブラリのすべてのコードを.aファイル内に保持するオプションが原因で発生すると思います。したがって、参照は必要ありません(失敗はありません)。