linux组播qt程序,Linux Qt程序打包成一个可执行文件

最近用Qt写了一个上位机, 而且是跨平台(Windows, Linux, ARM-Linux), 开发完成后需要对程序进行打包, windows的打包非常容易,选择非常多, 但是linux下面的选择就少了些.

方案的选择

官方的QT Installer Framework

第三方的AppImage

前者,可以制作online installer, 就像Qt本身一样, 但是稍微麻烦一些, 后者对于简单的程序打包比较容易很方便.

appImage的使用准备

根据个人实践对比, 认为对于小程序而言,appImage比较好用, 原因在于打包后只有一个文件, 而且不会对系统造成任何污染或者影响.

自己编译的so的查找,LDD有关

因为个人开发的上位机包含一个直接写的shared library(.so)用来操作硬件, 在链接的时候使用-L和-l来指定了. 而appImage使用的是ldd来确定各个库, 因此先使用ldd来确定是否可以找到所有的库.

$ ldd XXXXX

linux-vdso.so.1 =>  (0x00007ffe04185000)

libYYYY.so => not found

libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f3539277000)

libQt5Widgets.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Widgets.so.5 (0x00007f3538a05000)

libQt5Gui.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Gui.so.5 (0x00007f353820e000)

libQt5Core.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Core.so.5 (0x00007f3537afb000)

libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f35377e8000)

libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f35375d1000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3537208000)

libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f3536ff7000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3536dd9000)

libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f3536b87000)

libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f3536985000)

librt.so.1 => /li-可以看到自己编译的库libYYY.so找不到, 此时需要设置LD_LIBRARY_PATH来让ldd找到, 因此直接:

$ ldd XXXXX

linux-vdso.so.1 => (0x00007ffe04185000)

libYYYY.so => not found

libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f3539277000)

libQt5Widgets.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Widgets.so.5 (0x00007f3538a05000)

libQt5Gui.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Gui.so.5 (0x00007f353820e000)

libQt5Core.so.5 => /home/hexiongjun/.Qt5.6.0_install/5.6/gcc_64/lib/libQt5Core.so.5 (0x00007f3537afb000)

libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f35377e8000)

libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f35375d1000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3537208000)

libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f3536ff7000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3536dd9000)

libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f3536b87000)

libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f3536985000)

librt.so.1 => /li-可以看到自己编译的库libYYY.so找不到, 此时需要设置LD_LIBRARY_PATH来让ldd找到, 因此直接:

export LD_LIBRARY_PATH=/Path/To/Lib:$LD_LIBRARY_PATH

然后再次运行ldd确定即可.

qmake的路径设置

如果前面的ldd找到的Qt的so都是属于系统的, 一般都是在Ubuntu或者其他Linux上面使用qt5-default这个包名安装, 那么就会在系统的/usr/lib里面有对应的Qt5XXX.so, 而我们使用的是Qt SDK里面的so, 因此, 我们需要设定一下qmake的路径, 从而让其可以自动的找到SDK中的so而不是用系统的so.

export PATH=/PATH/To/QTSDK/qmakeBIN:$PATH

图标的设置

需要配置一个XXX.desktop文件

打包

打包非常简单使用下面的命令即可:

/Path/To/linuxdeployqt-continuous-x86_64.AppImage  XXX_Executable  -appimage

分发

打包后会出现一个.appImage的文件, 然后拷贝给其他人就可以了.

运行的时候可以看到其实这个appImage是会自己mount到一个地方:

$ cat /proc/26203/maps | awk '{print $6 }' | sort | uniq  | grep \.mount

/tmp/.mount_Mx4jlh/lib/libEGL.so.1

/tmp/.mount_Mx4jlh/lib/libfreetype.so.6

/tmp/.mount_Mx4jlh/lib/libgbm.so.1

/tmp/.mount_Mx4jlh/lib/libgthread-2.0.so.0

/tmp/.mount_Mx4jlh/lib/libicudata.so.56

/tmp/.mount_Mx4jlh/lib/libicui18n.so.56

/tmp/.mount_Mx4jlh/lib/libicuuc.so.56

/tmp/.mount_Mx4jlh/lib/libjasper.so.1

/tmp/.mount_Mx4jlh/lib/libjpeg.so.8

/tmp/.mount_Mx4jlh/lib/libpng12.so.0

/tmp/.mount_Mx4jlh/lib/libQt5Core.so.5

/tmp/.mount_Mx4jlh/lib/libQt5DBus.so.5

/tmp/.mount_Mx4jlh/lib/libQt5Gui.so.5

/tmp/.mount_Mx4jlh/lib/libQt5Widgets.so.5

/tmp/.mount_Mx4jlh/lib/libQt5XcbQpa.so.5

/tmp/.mount_Mx4jlh/lib/libXXXX.so

/tmp/.mount_Mx4jlh/lib/libwayland-client.so.0

/tmp/.mount_Mx4jlh/lib/libwayland-server.so.0

/tmp/.mount_Mx4jlh/lib/libxcb-xfixes.so.0

/tmp/.mount_Mx4jlh/lib/libXext.so.6

/tmp/.mount_Mx4jlh/lib/libXi.so.6

/tmp/.mount_Mx4jlh/lib/libXrender.so.1

$ cat /proc/26203/maps | awk '{print $6 }' | sort | uniq | grep \.mount

/tmp/.mount_Mx4jlh/lib/libEGL.so.1

/tmp/.mount_Mx4jlh/lib/libfreetype.so.6

/tmp/.mount_Mx4jlh/lib/libgbm.so.1

/tmp/.mount_Mx4jlh/lib/libgthread-2.0.so.0

/tmp/.mount_Mx4jlh/lib/libicudata.so.56

/tmp/.mount_Mx4jlh/lib/libicui18n.so.56

/tmp/.mount_Mx4jlh/lib/libicuuc.so.56

/tmp/.mount_Mx4jlh/lib/libjasper.so.1

/tmp/.mount_Mx4jlh/lib/libjpeg.so.8

/tmp/.mount_Mx4jlh/lib/libpng12.so.0

/tmp/.mount_Mx4jlh/lib/libQt5Core.so.5

/tmp/.mount_Mx4jlh/lib/libQt5DBus.so.5

/tmp/.mount_Mx4jlh/lib/libQt5Gui.so.5

/tmp/.mount_Mx4jlh/lib/libQt5Widgets.so.5

/tmp/.mount_Mx4jlh/lib/libQt5XcbQpa.so.5

/tmp/.mount_Mx4jlh/lib/libXXXX.so

/tmp/.mount_Mx4jlh/lib/libwayland-client.so.0

/tmp/.mount_Mx4jlh/lib/libwayland-server.so.0

/tmp/.mount_Mx4jlh/lib/libxcb-xfixes.so.0

/tmp/.mount_Mx4jlh/lib/libXext.so.6

/tmp/.mount_Mx4jlh/lib/libXi.so.6

/tmp/.mount_Mx4jlh/lib/libXrender.so.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值