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

Qt6.6.1静态编译后链接报错:libtiff.so未定义inflateEnd符号

解决Qt 6.6.1静态链接时libtiff/libz的链接错误

问题根源

静态链接Qt时,系统动态库libtiff.so依赖libz.so的符号,但CMake未自动将libz加入链接列表,导致符号未定义和DSO缺失报错。

解决方案步骤

1. 验证Qt编译配置

确认编译Qt源码时的configure命令开启静态编译并正确处理依赖:

  • 必须包含-static参数,同时指定使用Qt自带的zlib静态库,避免依赖系统动态zlib:
    ./configure -static -prefix /usr/local/qt6-static -qt-zlib -no-system-zlib
    

2. 修改CMakeLists.txt

在现有配置中手动添加zlib链接依赖,确保Qt静态模块正确引入:

cmake_minimum_required(VERSION 3.24)
project(YourQtProject)

# 指定静态Qt的安装路径
set(CMAKE_PREFIX_PATH "/usr/local/qt6-static")

# 查找项目所需的Qt模块(按需调整)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Gui)

# 开启静态链接选项
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
set(Qt6_USE_STATIC_LIBS ON)

# 添加项目可执行文件
add_executable(YourQtProject main.cpp)

# 链接Qt模块与zlib库
target_link_libraries(YourQtProject PRIVATE
    Qt6::Core
    Qt6::Widgets
    Qt6::Gui
    z  # 手动添加zlib链接依赖
)

3. 强制指定静态zlib库(可选)

若上述修改无效,直接指定Qt编译时自带的静态zlib库路径:

# 定位Qt自带的静态zlib库
find_library(ZLIB_STATIC libz.a PATHS "${CMAKE_PREFIX_PATH}/lib")
target_link_libraries(YourQtProject PRIVATE ${ZLIB_STATIC})

4. 清理重建项目

执行以下命令彻底清理旧构建文件,重新编译:

rm -rf build && mkdir build && cd build
cmake .. && make

额外注意事项

  • 编译Qt时需确保所有依赖(如tiff、zlib)均使用静态版本,避免混合动态/静态库引发冲突
  • 禁止同时链接动态与静态Qt模块,确保find_package仅检索到静态Qt库

内容的提问来源于stack exchange,提问作者Kirill Margolin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:48:10