是否有为 Visual Studio 2010 编译 libzip 的文档?我从 libzip 网站和 Google 看到的所有内容都没有返回任何结果。
8 回答
编辑:
在开始此处提供的答案之前,这似乎不再是@Thomas Klausner 下面的答案的问题。
以下应该为您提供 VS10 解决方案:
如果您还没有这样做,请安装CMake
下载zlib并将其解压缩到例如
C:\devel
. 下载链接位于主页的一半左右。目前这提供了 zlib 版本 1.2.7。要解决此仅影响 64 位 Windows 的CMake 错误,请添加
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND MSVC) set_target_properties(zlibstatic PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") endif()
到 C:\devel\zlib-1.2.7\CMakeLists.txt 结尾
下载并解压libzip到 eg
C:\devel
在VS10 命令提示符下,
cd C:\devel\zlib-1.2.7
mkdir build && cd build
cmake .. -G"Visual Studio 10" -DCMAKE_INSTALL_PREFIX="C:\devel\installed\zlib"
这会将安装路径设置为C:\devel\installed\zlib
而不是默认的C:\Program Files\zlib
. 对于 64 位 Windows,"Visual Studio 10 Win64"
用作-G
参数。msbuild /P:Configuration=Debug INSTALL.vcxproj
msbuild /P:Configuration=Release INSTALL.vcxproj
cd C:\devel\libzip-0.10.1
mkdir build && cd build
cmake .. -G"Visual Studio 10" -DCMAKE_PREFIX_PATH="C:\devel\installed\zlib"
将路径设置为安装 zlib 的位置,以便 CMake 可以找到 zlib 的包含文件和库。同样,对于 64 位 Windows,"Visual Studio 10 Win64"
请用作-G
参数。
这应该导致C:\devel\libzip-0.10.1\build\libzip.sln
. 看起来代码中存在一些特定于 POSIX 的问题,但它们应该很容易解决(例如,在 zipconf.h 中#include <inttypes.h>
需要替换为#include <stdint.h>
;有些snprintf
调用需要替换为,例如_snprintf
)。
我无法发表评论,所以除了弗雷泽的回答:在过去的几天里,libzip 的最新存储库版本应该在 VS 上编译而无需额外的补丁。请尝试一下,让开发人员知道是否仍然缺少部件。
无法评论上面的答案,但试图让它工作,最后发现配置属性下的输出目录和调试中的命令。
您可以删除 ALL_BUILD、ZERO_CHECK、INSTALL 和 PACKAGE,它将构建良好,而不会出现任何链接错误或 linux 特定错误。
使用 libzip-1.0.1、zlib-1.2.8 和 VS Community 2013。
添加到路径:
C:\Program Files (x86)\CMake\bin;C:\Windows\Microsoft.NET\Framework64\v4.0.30319
cmake 行变成:
cmake .. -G"Visual Studio 12 Win64" -DCMAKE_INSTALL_PREFIX="C:\devel\installed\zlib"
devel\libzip-1.0.1\lib\zip_source_filep.c:189 更改:
mask = umask(S_IXUSR | S_IRWXG | S_IRWXO);
到:
mask = umask(_S_IREAD | _S_IWRITE);
使用
- zlib-1.2.8 路径的环境变量
%ZLIB_DIR%
, %LIBZIP_DIR%
对于 libzip-1.0.1 的路径- VS 2015 速成版,和
%LIBZIP_DIR%/lib/zip_source_filep.c
根据http://hg.nih.at/libzip/rev/80457805a1e7修补的文件,
构建 zlib 和 libzip 的过程变成了这样:
构建 zlib
> cd /d %ZLIB_DIR% && md build & cd build
> cmake .. -G"Visual Studio 14 2015 Win64"- DCMAKE_INSTALL_PREFIX="%ZLIB_DIR%"
> msbuild /P:Configuration=Debug INSTALL.vcxproj
> msbuild /P:Configuration=Release INSTALL.vcxproj
构建 libzip
> cd /d %LIBZIP_DIR% && md build & cd build
> cmake .. -G"Visual Studio 14 2015 Win64" -DCMAKE_PREFIX_PATH="%ZLIB_DIR%"
> msbuild /P:Configuration=Debug ALL_BUILD.vcxproj
> msbuild /P:Configuration=Release ALL_BUILD.vcxproj
完毕!
(所以你看,@MikeLischke,CMake 有时确实可以开箱即用......)
在当前的 zlib 版本中,对此有一个贡献:
zlib-1.2.8\contrib\vstudio\vc10\zlibvc.sln
我在加载时遇到错误,因为其中一个配置在我的机器上无效,但重新编译解决了这个问题。我还必须更改项目属性>Configuration Properties>Linker>Input>Additional Dependencies
以将 Debug 配置更改zlibwapi.lib
为zlibwapid.lib
.
在 Visual Studio 2015、Win64 中:
如果构建 libzip 失败并显示如下消息:
Could NOT find ZLIB (missing: ZLIB_LIBRARY) (found version "1.2.8").
您所要做的就是将生成的“zlib.dll/zlibd.zll”和“zlib.lib/zlibd.lib”复制到 zlib 目录的顶部(.h/.c 文件所在的位置)。
Christian Severin 给出的答案对我帮助很大,但需要对 VS2019 和 32 位进行一些更新:
- 使用 VS 2019 构建时,必须使用 -A 选项,而不是使用“Win64”。
- 使用 VS 2019 构建时,32 位存档是“Win32”,而不是 x86。
- “Building zlib”部分有错字,必须是
Win64" -DCMAKE_...
,破折号前有一个空格
这是一个使用 VS2019 和 32 位构建的工作示例:
cd /d %ZLIB_DIR% && md build & cd build
cmake .. -G"Visual Studio 16 2019" -DCMAKE_INSTALL_PREFIX="%ZLIB_DIR%" -AWin32
msbuild /P:Configuration=Release INSTALL.vcxproj
cd /d %LIBZIP_DIR% && md build & cd build
cmake .. -G"Visual Studio 16 2019" -DCMAKE_INSTALL_PREFIX="%ZLIB_DIR%" -AWin32
msbuild /P:Configuration=Release ALL_BUILD.vcxproj