1

MS Visual Studio 2010 と Info-ZIP unzip ライブラリを使用してプロジェクトをビルドしようとしています。コードに呼び出しを挿入するUzpVersion()と、リンカーは次のように言って失敗しました:

エラー LNK2019: 未解決の外部シンボル _UzpVersion が関数 _wmain で参照されています

DUMPBIN は、ライブラリーがエクスポートすることを示しています_UzpVersion@0(同じコンパイラーでコンパイルされました)。しかし、オブジェクトファイルは_UzpVersion. 関数は次のように宣言されます。

extern "C" {

const UzpVer * UzpVersion(void);

}

それの何が問題なのですか?修正方法は?申し訳ありませんが、私は Visual C++ に精通していません。私はほとんどの時間を GNU C++ で過ごしました。

4

2 に答える 2

0

自分でそれを考え出しました。

ライブラリは呼び出し規約でコンパイルされますが__stdcall、エクスポートされた関数をそのように宣言しません。Visual Studio 2010 は既定で、呼び出し規約/Gdに切り替えるフラグ付きのプロジェクトをコンパイルします。__cdecl他のものに加えて、これらの呼び出し規約は、C 関数に対して異なる名前マングリング スキームも使用しています。

詳細は MSDN で読むことができます。

unzip.h特に Info-ZIP ライブラリの場合、ヘッダーを含める前に次の定義を追加することで問題が修正されます。

#define EXPENTRY __stdcall
#define USE_UNZIP_LIB
于 2013-08-04T11:55:48.723 に答える
0

これはリンク エラーです。コンパイラは UzpVersion の宣言を確認します。そうでない場合、コンパイルに失敗していたでしょう。.lib を含めるようにプロジェクトを構成したことを確認する必要があります。

ここに画像の説明を入力

編集:さらに、自分でコンパイルしていると言いました。ソースを C++ ではなく C としてコンパイルしていることを確認してください。

于 2013-08-04T08:50:46.243 に答える