qt linux 打包
本文在银河麒麟上成功运行,程序类型:Qt控制台,使用到的Qt外库:mysql数据库
1、环境一共有两台,1是编译机【装有Qt、数据库】,2是运行机【纯净机】
2、在编译机上安装Qt、mysql,我这里的Qt使用的是Qt5.6.1,mysql是5.7.28
3、解决Qt不能连接数据库问题
写一个访问Mysql的demo,运行打印Driver not loaded【如果没有报驱动问题,就跳过此步】
进入:/home/rainbow/zhuxy/app/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers
执行:ldd libqsqlmysql.so
显示有三个so not found,在网上找到

放在下图路径下:

在运行demo,应该不会报驱动的问题了,如果还有就上网上解决办法,这一步就是用来解决当前编译机能正常访问mysql
4、将demo编译成release可执行文件,名字是test
5、新建空文件夹,将可执行文件放进去;新建两个脚本findso.sh,test.sh【和可执行文件名字一样】
6、findso.sh
#!/bin/bash
LibDir=$PWD"/lib"
Target=$
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done
原理是再当前路径新建lib文件夹,再将指定文件所依赖的so赋值到此文件夹中
7、test.sh
#!/bin/sh
appname=`basename $ | sed s,\.sh$,,`
dirname=`dirname $`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"
这个脚本用来拉起和它名字一样的可执行文件。为什么不直接拉可执行文件呢?因为linux寻找so的路径没有包含当前路径,而我们已经将依赖的so放在当前路径了,所以需要让linux首先在当前路径找so,
就是上面的:LD_LIBRARY_PATH=$dirname export LD_LIBRARY_PATH
8、找所有的so
在文件夹中打来终端,执行:findso.sh test,执行完毕会在当前路径生成lib文件夹,将lib文件夹的所有so移动到当前文件夹并删除lib
9、将Qt自己的sqldriver文件夹赋值到当前文件夹
路径:/home/rainbow/zhuxy/app/Qt5.6.1/5.6/gcc_64/plugins/sqldrivers
10、将3中的so赋值到当前文件夹
最终样子,红色的是手动加的,其他的是findso脚本找到的。

11、将文件夹复制到目标机,执行./test.sh拉起软件
不出意外就能拉起
ps
1、如果拉起还是发现有问题,首先看什么so没有找到,ldd test。也可以添加拉软件的打印信息:export QT_DEBUG_PLUGINS=1,然后再拉软件,就能看到找依赖so的过程
2、目前发现控制台软件很好打包,但是带有widget的软件一直报xcb问题,目前还没解决,毕竟没有这样的项目,先不管
qt linux 打包的更多相关文章
- Linux 打包QT程序到未安装QT的其他Linux主机下运行
昨天终于改好了一个开源但是用起来有问题的串口调试助手,想把它打包一下以后在其他电脑上也可以用. 找了网上的一个教程打包后,在本机上可以正常使用,但是移植到另一台上就出现缺少xcb的提示. 上网搜资料倒 ...
- QT程序打包发布
本来感觉这是一个简单的操作,今天看见群里有人在问这个问题,他说网上查了很多都不成功,突然就想把自己初学的时候记录一下! 题目谢了QT程序的打包发布,那就是两步骤:打包+发布! 注释:这篇博文用的是Qt ...
- Qt 程序打包发布总结
1. 概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...
- 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】
[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...
- Qt之打包发布(NSIS详解)
来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html 发布方式 Qt发布的时候,通常使用两种方式: (1)静态编译 (2)动态编译 ...
- ubuntu 环境下的QT程序打包
很多的时候 需要将自己写的QT 程序发布一下 所以今天教一下 怎么在ubuntu 环境下将自己的写的Qt 程序打包打包是为了不依赖 开发环境 和开发的库. 1. QtCreate使用Release版 ...
- Qt程序打包,自动拷贝依赖文件
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt程序打包,自动拷贝依赖文件 本文地址:http://techieliang.com ...
- Qt开发北斗定位系统融合百度地图API及Qt程序打包发布
Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...
随机推荐
- Nginx的特性功能-反向代理、负载均衡、缓存、动静分离、平滑升级
反向代理 nginx配置文件 events { } 事件驱动 httpd { } 关于httpd相关的配置 server { } 定义虚拟主机 location { } ...
- Statefulset:部署有状态的多副本应用
10.1.什么是Statefulset StatefulSet是Kubernetes提供的管理有状态应用的负载管理控制器API. 特点: 1.具有固定的网络标记(主机名) 2.具有持久化 ...
- Linux学习26-linux查看某个时间段的日志(sed -n)-史上最详细
前言 在linux上查找日志的时候,如果我想找出某个时间段的日志,比如查找今天早上8点到下午2点的日志. 用grep不太方便直接过滤出来,可以使用sed根据时间去查找 sed -n '/开始时间日期/ ...
- Invalid mime type "application nd.ms-excel; charset=utf-8;charset=utf-8": does not contain '/'
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...
- SSM之JSON通用返回格式
/** * 通用的返回的类 * */ public class Result { //状态码 100-成功 200-失败 private int code; //提示信息 private String ...
- Hive修改表语句
0x01:重命名表 1 ALTER TABLE table_name RENAME TO new_table_name; 上面这个命令可以重命名表,数据所在的位置和分区都没有改变. 0x02:改变列名 ...
- 【luogu 5395】 【模板】第二类斯特林数·行
code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...
- Python 检查代码占用内存 工具和模块
只介绍简单的使用, 更多使用方法请查看官方文档 tracemalloc 官方文档 tracemalloc文档地址 使用 import tracemalloc tracemalloc.start() # ...
- 洛谷P1107 [BJWC2008]雷涛的小猫 题解
题面 以下是luogu给的标签 但字符串是什么鬼.... 玄学... 哦吼~ #include<cstdio> #include<iostream> using namespa ...
- 【luoguP2994】[USACO10OCT]吃晚饭的时候Dinner Time
题目链接 按顺序对于每个座位找一个最近的同时编号最小的牛就行了 #include<iostream> #include<cstring> #include<cstdio& ...