9

背景として、中規模の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であることを確認しました。

4

1 に答える 1

17

共有ライブラリ(Windows-speakのDLL)にリンクするには、次のものが必要です。

  1. コンパイル時のヘッダーファイル:Dbghelp.h
  2. リンク時のインポートライブラリ:Dbghelp.lib
  3. Dbghelp.dll実行時のDLL:。

明らかに1と3があり、2がありません。VisualStudioに付属のWindows SDKには、インポートライブラリが含まれています。ただし、プロジェクトのリンカーオプションに追加の依存関係として追加する必要があります。

このような:

ここに画像の説明を入力してください

于 2012-03-01T20:30:12.080 に答える