QT5程序部署提示缺少Qt5系统库问题的解决方法 symbol lookup error /libQt5XcbQpa.so.5: undefined symbol:xxx
https://blog.csdn.net/qq_29852231/article/details/128853681
QT5程序部署提示缺少Qt5系统库问题的解决方法
问题:在用QT5.12开发程序后,部署至现场(Ubuntu18/20)发现提示缺少QT5的平台库(platform)或者系统提供的QT5平台库无法正常支撑程序运行
解析:经过研究发现,即时将Platform文件夹拷贝至程序同级目录,仍无法正常运行,通过对platform内的动态库的依赖检查发现可能是因为二级依赖查找到的库不全或版本不对导致。
解决方法
最简单的解决方法就是在部署环境中直接安装相应版本QT,但是作为商业产品,这种行为不可取,花费了大量时间,也撞了两次运气,终于找到了解决方法,如下。
首先需要将网上常说的,到指定路径寻找依赖的配置提前,越靠前越好:
QMAKE_LFLAGS += "-Wl,-Bsymbolic,-rpath,\'\$$ORIGIN\'"
QMAKE_LFLAGS += "-Wl,-Bsymbolic,-rpath,\'\$$ORIGIN/lib\'"
QMAKE_LFLAGS += "-Wl,-Bsymbolic,-rpath,\'\$$ORIGIN/../lib\'"
1
2
3
只有足够靠前,在编译链接时,程序第一寻找的第一链依赖的动态库路径才不是系统路径而是指定路径。
经试验,这段语句如果放在后面,程序第一寻找的QT平台库会去系统中找而非指定路径,这个应该与makefile的编译顺序有关。
通过脚本抓取程序第一链依赖的路径
脚本内容如下:
#bash ***.sh
#! bin/base
LibDir=$PWD/lib
mkdir $LibDir
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done
1
2
3
4
5
6
7
8
9
10
11
12
13
执行脚本语句为
sudo jiaoben.sh chengxu
1
脚本会将抓出的第一链依赖放入程序同级的lib文件夹中,再将QT安装路径下的5.12/gcc/plugins/platform文件夹拷贝至程序同级目录中,至此,程序所需的第一链依赖全部准备完成。
此时在实机环境部署仍有可能报错:
loaded library "/home/sinovel/S/platforms/libqxcb.so"
./S: symbol lookup error: /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: undefined symbol: _ZN22QWindowSystemInterface24setPlatformFiltersEventsEb, version Qt_5_PRIVATE_API
1
2
该问题为platform文件夹中QT平台动态库寻找到的依赖版本不对或缺失导致。
我们再将QT安装路径下的5.12/gcc/lib文件夹拷贝至程序所在目录的上级目录中,再启动即可正常启动。
放在上级目录的原因是,platform中的动态库QT官方在编译时第一指向即在上二层级中,放在程序所在目录上一级目录中即满足了platform中动态库的第一寻址路径,防止其从系统库中找寻版本不对的动态库甚至找不到动态库。
至此,程序可以正常部署运转。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_29852231/article/details/128853681
QT5程序部署提示缺少Qt5系统库问题的解决方法 symbol lookup error /libQt5XcbQpa.so.5: undefined symbol:xxx的更多相关文章
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...
- SELinux导致无法访问外网,PHP连接MySQL异常Can't connect to MySQL server、redis程序访问提示Redis server went away的解决方法
今天上班遇到的问题,新配的Linux服务器,php.Apache和一系列扩展插件装好后,在本地好好的程序移上去就一直抱数据库连接错误,而用sql命令却能连接上去, 做了一个简单的判断数据库连接页面还是 ...
- windows 7 提示缺少D3DCOMPILER_47.dll的正确解决方法
下载 KB4019990补丁 我上传一下吧. 点击下载
- xshell6和xftp6运行提示缺少mfc110u.dll文件的解决办法
xshell6和xftp6运行提示缺少mfc110u.dll文件的解决办法 下载地址 http://www.microsoft.com/zh-CN/download/details.aspx?id=3 ...
- 将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法
本博客主要是说一下,,如何将html代码部署到阿里云服务器,并进行域名解析,以及在部署过程中遇到的问题和解决方法. 1.先在阿里云上购买一台阿里云服务器(ECS云服务器): 2.远程连接上该服务器,在 ...
- 启动android程序和虚拟机时候出现如下错误的解决方法
启动android程序和虚拟机时候出现如下错误的解决方法. 错误重现: [2011-07-13 16:22:48 - Emulator] invalid command-line parameter: ...
- Windows 系统提示“内存不足”的原因及解决方法
Windows 系统提示“内存不足”的原因及解决方法 windows XP vista 及windows 7系统的电脑有时候会出现系统提示“内存不足”,这是由多方面原因造成的.本文具体分析下 ...
- Sublime2编译Python程序EOFError:EOF when reading a line解决方法【转】
在Sublime2中编译运行Python文件时,如果代码中包含用户输入的函数时(eg. raw_input()),Ctrl+b编译运行之后会提示以下错误: 解决方法:安装SublimeREPL打开Su ...
- 在启动php时,无法启动此程序,由于计算机中丢失MSVCR110.dll的解决方法
在启动php时,运行RunHiddenconsole.exe php-cgi.exe -b 127.0.0.1:9000 -c时,出现错误:无法启动此程序,由于计算机中丢失MSVCR110.dll 方 ...
- 排错-Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法
Loadrunner添加Windows Resource计数器提示“找不到网络路径”解决方法 by:授客 QQ:1033553122 1.启动windows相关服务 win->services. ...
随机推荐
- HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖
鸿蒙核心技术##运动开发##Core Speech Kit(基础语音服务)# 前言 在运动类应用中,语音播报功能不仅可以提升用户体验,还能让运动过程更加生动有趣.想象一下,当你准备开始运动时,一个温暖 ...
- Grafana+Prometheus+Node_exporter监控Linux系统
一.简单介绍 这里介绍使用prometheus+grafana+node_exporter实现linux系统的监控.下面针对这三个组件进行具体的说明 prometheus prometheus是一套开 ...
- 你应该懂的AI大模型(二) 之 大模型技术架构
一.行业变化 Software is eating the world,but AI is going to eat software! "软件正在吞噬世界" 这一观点由网景公 ...
- 如何在FastAPI中巧妙玩转数据脱敏,让敏感信息安全无忧?
扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 一.Pydantic模型敏感字段 ...
- Windows 系统 局域网文件夹共享无法访问的终极解决方法
先介绍 Win10 无法访问其他电脑的解决方法 首先,Win10 能成功访问共享文件夹,必须有安装 SMB1 协议,否则会提示找不到网络名称的提示. 方法很简单,点击 微软小娜 Cortana 输入 ...
- CF1946C Tree Cutting 题解
CF1946C Tree Cutting 容易发现,如果连通块含有节点数的最小值为 \(x\),并且使用的刀数多于或等于 \(k\),那么 \(x\) 一定可以成为最后的结果.原因是我们可以通过减少一 ...
- mysql 笛卡尔积
简介 新生成的表的行数 第一个表的行数 * 第二个表的行数 参考链接 mysql 必知必会
- docker 开启远程访问功能
简介 部署了一个http服务在docker上,由于docker有自己的端口似乎无法访问 参考链接 https://blog.csdn.net/longzhanpeng/article/details/ ...
- K8S三、实战
目录 创建第一个pod 创建Deployment 滚动升级和回滚 创建serivce 访问Service HPA 创建第一个pod kubectl create deployment nginx-de ...
- 自动化数据集成的BI工具,为你提供决策洞察力
传统的商业智能(BI)报表系统采用的是"业务提报表需求,IT进行开发"的模式.决策管理者和业务人员提出用报表等来展示经营管理数据的需求:接着IT响应需求,进行需求沟通.数据处理加工 ...