背景として、中規模のLinuxコードベース(巨大な.soにコンパイル)をx64ウィンドウ(.dllにコンパイル)に移植することに遭遇しました。リンカーに問題がありました。
最小限のテストケースとして、次のファイルからVisualStudioプロジェクトを作成する場合:
#include <Windows.h>
#include <Dbghelp.h>
void do_stuff(char const * s)
{
char buffer[4096];
long int len = UnDecorateSymbolName(
s,
buffer,
sizeof(buffer),
UNDNAME_COMPLETE);
}
プロジェクトタイプをDLLに設定してビルドすると、「LNK2001:未解決の外部シンボル__imp_UnDecorateSymbolName」というエラーが発生します。つまり、ファイルは正しくコンパイルされますが、dllへのリンクに失敗します。
特に(少なくとも私のシステムでは)dbghelp.libのようなファイルがないため、目標はdllがdbghelp.dllにリンクすることだと思います。では、DLLがアプリケーションにロードされるときではなく、なぜ今そのシンボルを解決しようとしているのでしょうか。そして、なぜそれはその機能をとにかく見ることができないのですか?
明確にするために、x64 DLLをビルドしていること、およびC:\ Windows\System32のdbghelp.dllがx64であることを確認しました。