Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未解析的外部符号\uuuu imp\uuuu zip\u使用libzip打开(LNK2001)_C++_Cmake_Visual Studio 2017_Zlib_Libzip - Fatal编程技术网

C++ 未解析的外部符号\uuuu imp\uuuu zip\u使用libzip打开(LNK2001)

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

我最近在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(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