本文在银河麒麟上成功运行,程序类型: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 打包的更多相关文章

  1. Linux 打包QT程序到未安装QT的其他Linux主机下运行

    昨天终于改好了一个开源但是用起来有问题的串口调试助手,想把它打包一下以后在其他电脑上也可以用. 找了网上的一个教程打包后,在本机上可以正常使用,但是移植到另一台上就出现缺少xcb的提示. 上网搜资料倒 ...

  2. QT程序打包发布

    本来感觉这是一个简单的操作,今天看见群里有人在问这个问题,他说网上查了很多都不成功,突然就想把自己初学的时候记录一下! 题目谢了QT程序的打包发布,那就是两步骤:打包+发布! 注释:这篇博文用的是Qt ...

  3. Qt 程序打包发布总结

    1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...

  4. 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】

    [前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...

  5. Qt之打包发布(NSIS详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html 发布方式    Qt发布的时候,通常使用两种方式:   (1)静态编译  (2)动态编译 ...

  6. ubuntu 环境下的QT程序打包

    很多的时候 需要将自己写的QT 程序发布一下  所以今天教一下 怎么在ubuntu 环境下将自己的写的Qt 程序打包打包是为了不依赖 开发环境 和开发的库. 1. QtCreate使用Release版 ...

  7. Qt程序打包,自动拷贝依赖文件

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt程序打包,自动拷贝依赖文件     本文地址:http://techieliang.com ...

  8. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  9. Qt程序打包发布方法(使用官方提供的windeployqt工具)

    Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...

随机推荐

  1. Nginx的特性功能-反向代理、负载均衡、缓存、动静分离、平滑升级

    反向代理 nginx配置文件 events  {   }  事件驱动 httpd  {   }   关于httpd相关的配置 server {  }  定义虚拟主机 location {   }    ...

  2. Statefulset:部署有状态的多副本应用

    10.1.什么是Statefulset StatefulSet是Kubernetes提供的管理有状态应用的负载管理控制器API.        特点: 1.具有固定的网络标记(主机名) 2.具有持久化 ...

  3. Linux学习26-linux查看某个时间段的日志(sed -n)-史上最详细

    前言 在linux上查找日志的时候,如果我想找出某个时间段的日志,比如查找今天早上8点到下午2点的日志. 用grep不太方便直接过滤出来,可以使用sed根据时间去查找 sed -n '/开始时间日期/ ...

  4. 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 ...

  5. SSM之JSON通用返回格式

    /** * 通用的返回的类 * */ public class Result { //状态码 100-成功 200-失败 private int code; //提示信息 private String ...

  6. Hive修改表语句

    0x01:重命名表 1 ALTER TABLE table_name RENAME TO new_table_name; 上面这个命令可以重命名表,数据所在的位置和分区都没有改变. 0x02:改变列名 ...

  7. 【luogu 5395】 【模板】第二类斯特林数·行

    code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...

  8. Python 检查代码占用内存 工具和模块

    只介绍简单的使用, 更多使用方法请查看官方文档 tracemalloc 官方文档 tracemalloc文档地址 使用 import tracemalloc tracemalloc.start() # ...

  9. 洛谷P1107 [BJWC2008]雷涛的小猫 题解

    题面 以下是luogu给的标签 但字符串是什么鬼.... 玄学... 哦吼~ #include<cstdio> #include<iostream> using namespa ...

  10. 【luoguP2994】[USACO10OCT]吃晚饭的时候Dinner Time

    题目链接 按顺序对于每个座位找一个最近的同时编号最小的牛就行了 #include<iostream> #include<cstring> #include<cstdio& ...