0

Visual Studio 2008 を使用して、サード パーティのライブラリでプロジェクトをコンパイルしようとしています。ここで、lib ファイルを LINKER 入力に追加し、追加のライブラリの場所を更新しました。lib ファイルが実際に読み取られていることを確認してください (削除された追加の場所とコンパイルは失敗し、lib ファイルが見つからないと叫びました)。ライブラリに存在するエクスポートを dumpbin で確認しましたが、機能は存在します。

それでも、そのライブラリから関数を呼び出すと、エラー LINK2019 unresolved bla bla bla が発生します。誰かが似たようなことに直面した/何か考えがありますか? 私が使用しようとしているライブラリは、VS2003 を使用してコンパイルされたようです。

更新: ライブラリ ヘッダーに表示される定義:

#ifndef X
#define X

#ifdef _cplusplus
extern "C" {
#endif

_XFUNC int X_Open(int C);

#ifdef _cplusplus
}
#endif
#endif

そして、エクスポートの定義: (ライブラリ ヘッダーに含まれる別のヘッダーで)

#ifdef _BUILDXDLL
    #define _XFUNC __declspec (dllexport)
#else
    #ifdef WIN32
        #define _XFUNC __declspec (dllimport)
    #else
        #define _XFUNC
    #endif
#endif

完全なエラー メッセージ:

error LNK2019: unresolved external symbol _X_Open referenced in function "public virtual bool __thiscall MyClass::initialise(class QDomElement*)"(?initialise@MyClass@@UAE_NPAV QDomElement @@@Z)

関連するかどうかはわかりませんが、宣言は*X_Open*であり、エラー メッセージでは *_X_Open* と表示されます。よろしくお願いし ます。Anorflame

4

1 に答える 1

0

ブレークスルー! 問題は呼び出し規約にありました。私のプロジェクトは __cdecl(/Gd) に設定されていましたが、サードパーティのライブラリは __stdcall(/Gz) を使用してコンパイルされていました (リンカーが _ を X_Open に連結した理由を説明しています)。

これは別の問題につながりますが、それはすでに別の問題です。

于 2012-07-19T15:39:28.967 に答える