C++ 未解析的外部符号\uuuu imp\uuuu zip\u使用libzip打开(LNK2001)
我最近在windows 10上静态编译了libzip(和zlib),并在visual Studio 2017上使用它。我按照上的说明进行了修改,使其适合于使用VS2017进行构建,并修改了CMakelists.txt以静态构建库: 我在文件末尾添加了以下内容:C++ 未解析的外部符号\uuuu imp\uuuu zip\u使用libzip打开(LNK2001),c++,cmake,visual-studio-2017,zlib,libzip,C++,Cmake,Visual Studio 2017,Zlib,Libzip,我最近在windows 10上静态编译了libzip(和zlib),并在visual Studio 2017上使用它。我按照上的说明进行了修改,使其适合于使用VS2017进行构建,并修改了CMakelists.txt以静态构建库: 我在文件末尾添加了以下内容: ADD_LIBRARY(zipstatic STATIC ${LIBZIP_SOURCES} ${LIBZIP_EXTRA_FILES} ${LIBZIP_OPSYS_FILES}) SET_TARGET_PROPERTIES(zipst
ADD_LIBRARY(zipstatic STATIC ${LIBZIP_SOURCES} ${LIBZIP_EXTRA_FILES} ${LIBZIP_OPSYS_FILES})
SET_TARGET_PROPERTIES(zipstatic PROPERTIES VERSION 3.0 SOVERSION 3 )
TARGET_LINK_LIBRARIES(zipstatic ${ZLIB_LIBRARY} ${OPTIONAL_LIBRARY})
INSTALL(TARGETS zipstatic
RUNTIME DESTINATION bin
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib)
在编译libzip时,我还使用了patch from来消除STDIN\u FILENO
错误
构建过程进展顺利,我在链接器选项中添加了zlibstatic.lib
和libzipstatic.lib
,并将运行时库设置为/MT
我写了这个小代码,看看是否一切正常:
#include "stdafx.h"
#include <zip.h>
#include <zlib.h>
int main()
{
zip *archive = zip_open("C:\\test.zip", ZIP_CREATE, 0);
return 0;
}
和zlibstatic.lib的摘要:
50 .debug$F
860 .debug$S
2C1 .drectve
4317 .rdata
ADB6 .text$mn
您是否添加了链接器需要查找
zlibstatic.lib
和libzipstatic.lib
的路径?@VTT缺少该路径不会导致未定义的引用错误。@user0042如果找到了不正确的库版本,实际上可能是这样。@VTT很好,是的。可能在项目配置中?这个宏是唯一能让你的应用程序期待库来自dll的东西。_imp前缀是一个死赠品(链接到_cdecl(dllimport)声明)。在VS项目和cmake项目中查找库。您还可以尝试在stdafx.hDid中添加#undef ZLIB_DLL
。您可以在链接器需要查找zlibstatic.lib
和libzipstatic.lib
的位置添加路径。@VTT缺少路径不会导致未定义的引用错误。@user0042如果找到不正确的库版本,实际上可能会出现这种情况。@VTT有道理,是的,也许在项目配置中?这个宏是唯一能让你的应用程序期待库来自dll的东西。_imp前缀是一个死赠品(链接到_cdecl(dllimport)声明)。在VS项目和cmake项目中查找库。您还可以尝试在stdafx.h中添加#undef zlibdll
50 .debug$F
860 .debug$S
2C1 .drectve
4317 .rdata
ADB6 .text$mn