为什么在C+中调用库(成功构建库)时会出现链接错误+; 我有一个问题,涉及调用C++库。图书馆的编纂是成功的。之后,该库由一个普通的可执行程序调用。但是,出现了几个链接错误。我举一个例子来说明我的问题

为什么在C+中调用库(成功构建库)时会出现链接错误+; 我有一个问题,涉及调用C++库。图书馆的编纂是成功的。之后,该库由一个普通的可执行程序调用。但是,出现了几个链接错误。我举一个例子来说明我的问题,c++,visual-studio-2010,dll,C++,Visual Studio 2010,Dll,我下载了旧版本的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 __TI

我下载了旧版本的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 

似乎没有导出任何符号
extern "C"
{
  #include<tiff.h>
}

基于这些讨论,我意识到我的程序的错误在于一些函数没有被正确定义。在某些库中,函数可能会在头文件中用关键字“
extern
”声明。但是,函数的实现是在另一个文件中定义的,在构建库时可以排除该文件。函数调用转换,如@ PRACKS411所解释的,是另一种情况,当遇到同样的问题时,你应该考虑。

@ H2CO3谢谢,我已经检查过了。库和可执行程序共享相同的函数调用conversion\u cdecl(/Gd)。但是,同样的错误也会发生。您如何调用编译器来构建和链接可执行文件?顺便说一下,您似乎在使用TIFFmalloc函数时遇到了问题。你确定这个函数在你的库中吗?谢谢,我已经按照你的建议做了。然而,仍然存在同样的错误。这很奇怪。可能您可以从vc++命令行在libtiff上使用dumpbin.exe来检查上述未解析符号是否实际存在于lib中。另外,看看Fatihk的链接。我想我已经找到了一些可能是我出现问题的原因。我将dumpbin.exe/exports tiff.lib用于从静态tiff库导出的所有定义。但是,似乎没有导出符号。因此,您是否能够解决此问题?我还建议您使用dumpbin.exe/SYMBOLS检查TIFFmalloc是否存在。我想知道如果TIFFmalloc不存在,您如何构建tifflib。还要检查你是否没有在项目中包括其他地方。如果是这样的话,那么你可能还需要在那里放置外部代码“C”。
C/C++ ----------> Advanced ---------->Call Convention--->_cdecl(/Gd) //Set only if required

C/C++----------->Advanced------------>Compile As----->C++ Code(/TP)