我们在linux下编写代码时,会用到一些额外的库(动态或者静态),如小编在qt下写opencv的程序,是在电脑上,项目需求,需要将其移植到嵌入式板子上。小编这里提供一种简单的方法,将我们在电脑上开发好的程序,可以打包复制到其他只要是Linux系统就可以运行,不需要再配置复杂的开发环境。

方法一:通过sh脚本

这里小编用qt下写的一个opencv程序示例:1.利用qt生成可执行文件,使用release的方式编译出可执行文件,然后新建一个文件夹,将可执行文件拷贝进去备用。

小编这里生成的文件是这样的:




linux sh文件执行docker命令 linux如何执行.sh文件_linux新建文件夹


2.利用脚本文件2.1新建文件
2.1.1pask.sh
2.1.2test2.sh

这个脚本文件名必须和要发布的程序名字相同,所以为 Server
新建文件后,文件夹包含内容如下:


linux sh文件执行docker命令 linux如何执行.sh文件_文件夹打包成pkg_02


2.2 添加脚本
向pack.sh文件里添加以下内容:

#!/bin/sh exe="test2" #你需要发布的程序名称des="/home/shang/test" #创建文件夹的位置deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') cp $deplist $des

然后向test2.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 "$@"

执行脚本
终端进入文件夹目录,运行:

sh ./pack.sh

可执行文件依赖的链接库将会拷贝到所在的目录,如图:


linux sh文件执行docker命令 linux如何执行.sh文件_linux_03


打包发布
将上面整个文件夹,复制拷贝到其他linux系统,在文件夹路径内终端运行:

./test2.sh

方法二:利用linuxdeployqt将程序打包成应用

ps:这也是笔者更喜欢的方法,原因可看下图,整个程序包结构更加简洁和清晰:


linux sh文件执行docker命令 linux如何执行.sh文件_linux新建文件夹_04


1、下载linuxdeployqt

github网址:

https://github.com/probonopd/linuxdeployqt/releases


linux sh文件执行docker命令 linux如何执行.sh文件_linux_05


2、把下载的文件放入 /usr/local/bin 内,并执行如下命令使其可以运行

chmod 777 linuxdeployqt-6-x86_64.AppImage

3、把qmake的路径添加到环境变量中

sudo gedit /etc/profile在文件末尾添加:export PATH="/home/shang/Qt5.11.2/5.11.2/gcc_64/bin:$PATH"

具体的路径和qt版本需要自己查看

4、假如 receiver是QT release出来的可执行文件,执行如下语句可复制依赖的文件到当前目录

linuxdeployqt-6-x86_64.AppImage receiver -appimage


linux sh文件执行docker命令 linux如何执行.sh文件_linux新建文件夹_04


至此就可以通过双击apprun或者receiver均可拷贝到其它任意一台linux电脑运行程序啦。