1 ubuntu
-
编译release版的源代码,生成对应的文件夹,如:
build-xxx-Release
-
在其他地方创建最终存放的文件夹,如
xxx_tool
; -
在 build-xxx-Release 文件夹中创建
copylib.sh
脚本,内容复制下面的:#!/bin/bash LibDir=$PWD"/lib" Target=$1 lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*")) $(mkdir $LibDir) for Variable in ${lib_array[@]} do cp "$Variable" $LibDir done
-
执行命令:
./copylib.sh xxx
,其中 xxx 为该目录下对应的二进制文件名,执行后会生成lib
文件夹; -
将 build-xxx-Release 中的
lib/*
和xxx
复制到xxx_tool
中; -
把 Qt 安装目录下的
platforms
文件夹整体复制导xxx_tool
中,命令如下:cp ~/Qt5.7.1/5.7/gcc_64/plugins/platforms ~/xxx_tool/. -rf
-
把前面的
copylib.sh
脚本复制到xxx_tool/platforms/
目录下,并在该目录下执行:./copylib.sh libqxcb.so
,会在此生成一个lib
文件夹; -
把
xxx_tool/platforms/lib/*
移动到xxx_tool/
即可,这一步已经把所有需要的库都复制完了; -
在
xxx_tool/
中创建xxx.sh
脚本,内容复制下面:#!/bin/sh appname=`basename $0 | sed s,\.sh$,,` dirname=`dirname $0` tmp="${dirname#?}" if [ "${dirname%$tmp}" != "/" ]; then dirname=$PWD/$dirname fi LD_LIBRARY_PATH=$dirname export LD_LIBRARY_PATH $dirname/$appname "$@"
-
最后,运行
./xxx.sh
即可运行程序;
2 windows
- 编译release版的源代码,生成对应文件夹,如:
build-picturelabel-Desktop_Qt_5_8_0_MSVC2015_64bit-Release
- 进入上面的文件夹,在进入子文件夹 release,把对应的 .exe 文件复制到要发布的文件夹中,如:D:/tool/
- 在“开始”界面中打开qt的命令行程序:
Qt 5.8 64-bit for Desktop
,执行命令:
cd D:/tool
windeployqt xxx.exe
- 在系统的环境变量删除opencv、boost等库的路径(路径先保存,还要恢复),然后运行一下发布的这个应用程序,如果提示缺少dll文件,就去库里找到这个dll文件,把它复制到应用程序的根目录即可,复制完所有dll文件后,基本上可以正常运行,然后在把刚刚删除的环境变量恢复!