我最近在Windows 10上静态编译了libzip(和zlib),并且我在Visual Studio 2017上玩它。我按照this thread上的说明进行了调整,使用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时,我还使用here中的补丁来消除STDIN_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;
}
当链接静态lib而不是DLL时,经常出现这种错误,但是我静态编译了libzip(我需要使用静态链接),所以我该怎么办?
编辑:zipstatic.lib摘要:
C8 .data
60 .debug$F
45C4 .debug$S
21BD .drectve
2690 .rdata
113C1 .text$mn
和zlibstatic.lib的摘要:
50 .debug$F
860 .debug$S
2C1 .drectve
4317 .rdata
ADB6 .text$mn