2012-03-01 27 views
6

バックグラウンドで、私はこのサイズのLinuxベースのコードベース(巨大な.so)からx64ウィンドウ(.dllにコンパイル)への移植を経験しました。リンカーに問題がありました。最小限のテストケースとしてDLL内の未解決のシンボルエラー

私は次のファイルからのVisual Studioプロジェクトを作成した場合、:

#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.dllにリンクするDLLです(少なくとも私のシステムでは)dbghelp.libのようなファイルがないからです。それでは、なぜ私のDLLがアプリケーションにロードされるのではなく、今、そのシンボルを解決しようとしていますか?とにかく、その機能を見ることができないのはなぜですか?

明らかに、私はx64 DLLをビルドしており、C:\ Windows \ System32のdbghelp.dllはx64であることを確認しました。共有ライブラリ、Windowsの-話す中のDLLへのリンク

+0

。これはVisual Studio、Platform SDKなどに含める必要があります。 – Luke

答えて

11

は、次のものが必要です。

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

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

:それはまだインポートライブラリdbghelp.libとリンクする必要が

enter image description here

+1

それはそれでした。私のwindows-search-fuは弱く、私のシステムは* dbghelp.libを持っています。依存関係にそれを加えることは、魅力のように働いた。 – user1243488

+0

Dbghelpは、Windowsのもっと難解なライブラリの1つです。膨大な数の異なるバージョンがリリースされており、多くのものがリリースされました。あなたのdevマシンに存在するが、単純なバニラのターゲットマシンには存在しない関数を呼び出す状況になるのは非常に簡単です。ちょっと注意してください! –

+4

または#pragma comment(lib、 "dbghelp.lib") –

関連する問題