在C ++中调用库(构建库成功)时,为什么会出现链接错误

时间:2013-05-10 10:42:48

标签: c++ visual-studio-2010 dll

我有一个与调用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 

似乎没有导出符号。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

根据讨论,我逐渐意识到我的程序错误在于某些功能尚未正确定义。可能会发生在某些库中,可以在头文件中使用关键字“extern”声明该函数。但是,该函数的实现在另一个文件中定义,在构建库时可以将其排除。函数调用转换,如@ praks411所解释的,是另一种情况,当您遇到同样的问题时应该考虑。