qt 打包发布时报错:$ ./copylib.sh libqxcb.so./libqxcb.so: /lib64/libQt5Core.so.5: version `Qt_5.1

在CentOS 7和CentOS Stream 9上,遇到Qt应用程序打包时依赖库`libqxcb.so`找不到`Qt_5.14`版本的问题。通过将Qt的路径添加到`/etc/ld.so.conf`并执行`sudo ldconfig`使配置生效,解决了错误。关键步骤包括修改配置文件、执行生效命令和复制缺失库到发布目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

在执行qt 发布打包时,其中总是报

./libqxcb.so: /lib64/libQt5Core.so.5: version `Qt_5.14' not found (required by ./libqxcb.so)

讨厌的很,修改临时配置文件根本不起作用

二、解决过程

后来尝试/etc/ld.so.conf解决

[admin@dev platforms]$ ./copylib.sh libqxcb.so
./libqxcb.so: /lib64/libQt5Core.so.5: version `Qt_5.14' not found (required by ./libqxcb.so)
 

将qt 所在的路径  加到 /etc/ld.so.conf中  再执行sudo Idconfig 生效

[root@dev etc]# vi ld.so.conf

[root@dev etc]# sudo ldconfig
[root@dev etc]#

 centos7 上

三、补充说明

这里补充一下:

 sudo idconfig 非常重要,要不然不生效,centos 7与centos stream9 都会报错,

四、centos stream 9 上实操部分截图

[root@localhost platforms]# ./copylib.sh libqxcb.so
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5XcbQpa.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5Gui.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
[root@localhost platforms]# chmod 777 copylib.sh 
[root@localhost platforms]# ./copylib.sh libqxcb.so
mkdir: 无法创建目录 “/root/桌面/public/public/platforms/lib”: 文件已存在
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5XcbQpa.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5Gui.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
[root@localhost platforms]# ./copylib.sh libqxcb.so
mkdir: 无法创建目录 “/root/桌面/public/public/platforms/lib”: 文件已存在
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5XcbQpa.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/libqxcb.so:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'/lib64/libQt5Gui.so.5:' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'version' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'`Qt_5_PRIVATE_API'\''' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'not' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'found' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'(required' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'by' 的文件状态(stat): 没有那个文件或目录
cp: 无法获取'./libqxcb.so)' 的文件状态(stat): 没有那个文件或目录
[root@localhost platforms]# 

   centos stream 9上执行时报的错。

                          配置生效命令

    配置生效后,再执行很安静,没有报错了,到lib下找类库,马发现很多

 

  将这些类库copy 放到正在发布的qt的根目录下即可

   以上是 centos stream9 上执行的过程

 五、总结:

      经过分析,libqxcb.so依赖库应该从qt安装目录下查找,错误提示信息中显示搜索路径为系统库目录,因此可以肯定是搜索路径的问题,因此需要添加环境变量,修改ld.so.config文件

在这里插入图片描述

修改后生效使用命令

再执行打包的命令时就可以了

重点是:/etc/ld.so.conf  中将自己机器的qt 路径放上去

本机QT路径是在:/opt/Qt5.14.1/5.14.1/gcc_64,所以,上面的配置为
**/lib  
**/plugins/platforms

<think>好的,用户现在遇到了两个问题:Qt的xcb插件找不到,以及libopencv_core.so.4.5d中undefined symbol的问题。我需要结合之前的对话和用户提供的引用信息来找到解决方案。 首先,关于xcb插件的问题,用户之前已经尝试过设置QT_PLUGIN_PATH和LD_LIBRARY_PATH,但可能路径设置不正确。根据引用[4],用户可能需要检查lib目录下的libxcb相关文件是否有冲突。比如,删除自带的libxcb.so.1可能解决某些符号冲突。另外,用户需要确保lib文件夹的结构正确,特别是platforms目录是否包含libqxcb.so,并且环境变量指向正确的路径。 接下来是libopencv_core.so中的undefined symbol错误,引用[3]提到可能是由于不同版本的库冲突,比如OpenCV和TBB库版本不兼容。用户需要检查系统中是否存在多个版本的TBB,或者OpenCV编译使用的TBB版本与当前安装的不一致。可能需要重新编译OpenCV,并确保TBB库的版本匹配,或者降级OpenCV到已知兼容的版本。 另外,用户提到的cv2和PyQt5版本冲突也可能导致问题,需要确认是否同存在不同版本的OpenCV,尤其是在Python环境中。可能需要使用虚拟环境来隔离依赖,或者调整库的加载顺序。 综合这些信息,解决方案应该包括正确设置Qt的环境变量,检查并解决库冲突,以及处理OpenCV的依赖问题。需要分步骤指导用户操作,并验证每一步的结果,确保问题得到解决。</think>### 分步解决方案:综合解决Qt XCB插件加载与OpenCV符号缺失问题 --- #### **问题1Qt平台插件xcb未找到** **根本原因**: 1. Qt插件搜索路径未正确配置,或`libxcb`相关库存在版本冲突 2. OpenCV与Qt底层依赖的第三方库(如TBB、FFmpeg)存在符号冲突[^1][^3] --- #### **步骤1:配置Qt插件搜索路径** 1. **确认`lib`文件夹结构** ```bash lib/ ├── platforms/ # 必须包含XCB插件 │ └── libqxcb.so # 核心插件文件 ├── libQt5XcbQpa.so.5 # Qt XCB平台模块 └── libxcb.so.1 # XCB基础库 ``` *若结构不符,需手动补充文件(从Qt安装目录拷贝)*[^4] 2. **修改启动脚本`run.sh`** ```bash #!/bin/bash export QT_PLUGIN_PATH="$PWD/lib:$QT_PLUGIN_PATH" # 关键:指向包含platforms的父目录 export LD_LIBRARY_PATH="$PWD/lib:$LD_LIBRARY_PATH" # 覆盖系统库路径 export QT_DEBUG_PLUGINS=1 # 启用插件调试 ./EWB_AI_VISION ``` 3. **解决库冲突(参考引用[4])** ```bash # 检查并删除冲突的libxcb库(备份后操作) cd lib rm -f libxcb.so.1 # 若软件自带库与系统库冲突 ``` --- #### **问题2:libopencv_core.so.4.5d undefined symbol _ZTIN3tbb4taskE** **根本原因**: OpenCV编译链接的TBB库版本(如TBB 2020)与运行加载的TBB库(如TBB 2018)不兼容[^3] --- #### **步骤2:修复OpenCV符号缺失** 1. **检查TBB库版本** ```bash # 查找系统中所有TBB库 find /usr/ -name "*libtbb*.so*" # 典型输出示例: # /usr/lib/x86_64-linux-gnu/libtbb.so.2 # 旧版 # /opt/intel/tbb/lib/libtbb.so.12 # 新版 ``` 2. **统一TBB版本** - **方案A(推荐)**:重新编译OpenCV,指定TBB路径 ```bash cmake -DCMAKE_PREFIX_PATH=/opt/intel/tbb \ -DWITH_TBB=ON \ -DBUILD_TBB=OFF .. ``` - **方案B**:强制替换系统TBB库 ```bash sudo ln -sf /opt/intel/tbb/lib/libtbb.so.12 /usr/lib/libtbb.so ``` 3. **验证OpenCV链接关系** ```bash ldd lib/libopencv_core.so.4.5 | grep tbb # 期望输出示例: # libtbb.so.12 => /opt/intel/tbb/lib/libtbb.so.12 (0x00007f8a1a200000) ``` --- #### **步骤3:综合环境修复** 1. **隔离Python环境冲突(参考引用[3])** ```bash # 创建虚拟环境 python -m venv venv source venv/bin/activate # 安装兼容版本 pip install PyQt5==5.15.2 opencv-python==4.3.0.36 ``` 2. **修复ffi_type_uint32错误(引用[2])** ```bash # 安装libffi-dev并重建符号链接 sudo apt install libffi-dev sudo ln -sf /usr/lib/aarch64-linux-gnu/libffi.so.7 /usr/lib/libffi.so.6 ``` --- ### 验证流程 1. **检查Qt插件加载** ```bash QT_DEBUG_PLUGINS=1 ./run.sh # 期望输出: # QFactoryLoader::QFactoryLoader() checking directory "/path/lib/platforms" # Loaded library "/path/lib/platforms/libqxcb.so" ``` 2. **验证OpenCV符号** ```python python -c "import cv2; print(cv2.__version__)" # 若无报错且输出4.3.0,则修复成功 ``` --- ### 相关问题 1. 如何查看Qt应用程序运行实际加载的库路径? 2. 多版本TAB库共存如何指定动态链接优先级? 3. 在嵌入式Linux系统中部署Qt应用需要注意哪些依赖项?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值