You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake ExternalProject构建zlib与libz时链接报权限拒绝错误

问题原因

构建失败和账号权限无关,核心错误是zlib库路径配置传值类型错误:
你给libzip传入的ZLIB_LIBRARY_RELEASE参数值是zlib的库目录${DEPEND_DIR}/zlib/install/lib,但该参数要求传入具体的二进制库文件路径,而非文件夹。链接器尝试将目录作为库文件读取解析时,就会抛出“Permission denied”的报错。

修复方法

优先使用第一种自动查找的方案,容错率更高:

方案1:通过搜索前缀自动定位zlib(推荐)

删除手动指定zlib头文件、库路径的配置,改为将zlib的安装目录加入libzip的包搜索路径,让libzip的CMake脚本自动查找匹配的zlib文件,避免手动写路径适配不同编译环境的问题。
修改后的libzip(原配置里命名为libz,建议改名避免和zlib本身混淆)配置如下:

ExternalProject_Add(libzip
    URL https://github.com/nih-at/libzip/archive/refs/tags/v1.7.3.zip
    URL_HASH MD5=98b4817aaa1f382513f08838c7192cbd
    DEPENDS zlib-install
    DOWNLOAD_DIR ${DEPEND_DIR}/libzip/repo
    SOURCE_DIR ${DEPEND_DIR}/libzip/src
    BUILD_IN_SOURCE 1
    CMAKE_ARGS  -D ENABLE_BZIP2=OFF
                -D ENABLE_LZMA=OFF
                -D ENABLE_GNUTLS=OFF
                -D ENABLE_MBEDTLS=OFF
                -D ENABLE_OPENSSL=OFF
                -D BUILD_REGRESS=OFF
                -D BUILD_DOC=OFF
                -D BUILD_EXAMPLES=OFF
                -D LIBZIP_DO_INSTALL=ON
                -D BUILD_SHARED_LIBS=ON
                -D CMAKE_PREFIX_PATH:PATH=${DEPEND_DIR}/zlib/install
                -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                -D CMAKE_INSTALL_PREFIX:PATH=${DEPEND_DIR}/libzip/install
)

方案2:手动指定正确的库文件路径

如果需要手动指定依赖路径,需要将ZLIB_LIBRARY_RELEASE指向具体的库文件,而非目录。
你当前使用MinGW编译zlib v1.2.11动态库,安装后对应的导入库路径为${DEPEND_DIR}/zlib/install/lib/libzlib.dll.a,对应修改配置即可:

set(ZLIB_INCLUDE_DIR ${DEPEND_DIR}/zlib/install/include)
# 指向具体的库文件,而非目录
set(ZLIB_LIBRARY ${DEPEND_DIR}/zlib/install/lib/libzlib.dll.a)

ExternalProject_Add(libzip
    # 其余参数不变,替换zlib相关的传参为:
    CMAKE_ARGS  # ... 其他原有参数
                -D ZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
                -D ZLIB_LIBRARY_RELEASE=${ZLIB_LIBRARY}
                -D ZLIB_LIBRARY_DEBUG=${ZLIB_LIBRARY}
                # ... 其他原有参数
)

如果编译的是zlib静态库,对应的库文件名为libzlib.a,替换对应路径即可。

补充说明
  • 编写超级构建配置时,尽量通过CMAKE_PREFIX_PATH传递依赖的安装前缀,不要手动硬编码头文件、库文件的完整路径,避免不同编译器、不同构建类型下库命名规则差异导致的适配问题。
  • zlib动态库编译完成后,zlib1.dll会存放在${DEPEND_DIR}/zlib/install/bin目录下,后续运行依赖libzip的程序时,需要将该目录加入系统PATH,否则会触发找不到dll的运行时错误。

内容的提问来源于stack exchange,提问作者Mostafa Abdelmegeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:48:27