1

C++ ライブラリの呼び出しに関する質問があります。ライブラリのコンパイルは成功です。その後、ライブラリは通常の実行可能プログラムによって呼び出されます。ただし、いくつかのリンク エラーが発生します。問題を説明するために例を示します。

古いバージョンの TIFF ライブラリ (バージョン 3.6.1) をダウンロードし、それを静的ライブラリにコンパイルしました: tiff.lib. その後、ライブラリを呼び出して TIFF ファイルを読み書きする実行可能プログラムを作成しました。ただし、次のエラーが表示されます。

 2>tiff.lib(tif_jpeg.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_lzw.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_dirinfo.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_luv.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_pixarlog.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_zip.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_dirwrite.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_write.obj) : error LNK2001: unresolved external symbol __TIFFmalloc
2>tiff.lib(tif_dirread.obj) : error LNK2001: unresolved external symbol __TIFFmalloc

tiff.lib正常にビルドされ、実行可能プログラムによって正常にリンクされているのに、リンク エラーが発生する理由がわかりません。に何か問題がある場合tiff.libは、lib をビルドするときのコンパイルおよびリンク手順中にリンク エラーが表示されるはずです。どんなアイデアでも大歓迎です!

編集:解決策を見つけるために、いくつかの詳細を追加します。tiff.libは静的ライブラリとして構築されておりdumpbin.exe /exports tiff.lib、ライブラリにエクスポートされたすべての定義を表示するために使用すると、次のメッセージが表示されます。

Dump of file tiff.lib

File Type: LIBRARY

  Summary

         3B8 .bss
        9405 .data
       D5640 .debug$S
         C38 .debug$T
         C4E .drectve
       19E79 .rdata
          84 .rtc$IMZ
          84 .rtc$TMZ
       3363E .text 

シンボルがエクスポートされていないようです。

4

2 に答える 2

3

tiff.lib は C ライブラリで、c++ でリンクしていると思います。したがって、 extern "C" を使用してヘッダー .h ファイルをインクルードする必要があると思います。

extern "C"
{
  #include<tiff.h>
}

上記のようなものは単なる例です。また、C++ プロジェクトのプロジェクト プロパティ ページで正しい呼び出し規約を設定していることを確認してください。

C/C++ ----------> Advanced ---------->Call Convention--->_cdecl(/Gd) //Set only if required

C/C++----------->Advanced------------>Compile As----->C++ Code(/TP)
于 2013-05-10T10:57:02.907 に答える