QT笔记(一) — 打包加壳成一个exe文件

(一)使用总结

1、Windows下打包后加壳合成一个exe文件可行;
2、Linux下打包,有两种方式一个脚本打包,一个是工具打包,两者有相同操作方式是执行”sudo ./xxx”;
3、Linux 下工具打包需要考虑低版本打包,高版本可运行,其中生成的桌面文件(.desktop)的形式可达到Windows双击exe的效果,但是
ubuntu兼容性上操作有差异太繁琐,不如直接在打包后的目录下运行“sudo ./demo”的方式;
4、Linux下类似Windows加壳工具appimagetool生成 demo-x86_64.AppImage,此方式生成的demo-x86_64.AppImage可双击运行,且无需考虑lib环境变量的问题,但是没有解决的是双击的时候怎么启动root权限,目前只能执行 sudo ./demo-x86_64.AppImage;
5、appimagetool龙芯下目前不支持,源码中只指定支持x86,源码尚未研究,后续更新;
6、Linux下将打包后的目录制作成iso写到CD区,在CD区直接运行命令可操作设备。
mkisofs -r -o ./demo.iso ./demo

(二)Windows下打包和加壳

1、windeployqt:执行 windeployqt xxx.exe 生成exe依赖的库文件,结果如下图:
在这里插入图片描述
缺点是文件太多,且占用空间大。
2、使用 Enigma Virtual Box 工具将上述打包文件生成独立的exe,可压缩生成,使生成的文件较小,此工具免费;
下载地址: https://enigmaprotector.com/en/downloads.html
在这里插入图片描述
在这里插入图片描述
如果不执行压缩的话,形成的独立的exe依然很大,执行压缩容量大小接近缩小一半。

(三)Linux下打包和加壳

Linux下打包目前共有两种方式可以参考,两种方式有不同之处,但是也可以执行相同的操作,就是sudo ./demo。
1、脚本的方式:此方法最简单,无需考虑版本兼容问题,只需执行脚本(sudo ./demo.sh)即可,使用命令进入可执行文件的目录下,然后新建两个shell脚本:

(1)pack.sh:用于拷贝程序链接的动态库要打包的文件夹中。
	#!/bin/sh    
	exe="demo" #需要发布的程序名称  
	pwd="/home/ohuohuoo/Desktop/demo" #创建文件夹的位置  
	files=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')    
	cp $files $pwd  
(2)demo.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 "$@" 

2、类比windeployqt,通过Linuxdeployqt部署打包:
(1)下载地址: https://github.com/probonopd/linuxdeployqt/releases
在这里插入图片描述
支持命令行执行和源码编译两种方式,但是命令行只支持x86下的;
(2)优先选择第一个,可直接命令执行,但是不论是源码还是命令行,仅能在ubuntu18.04以下运行,像ubuntu20.04编译运行时会提示系统版本太新的错误;
(3)设置QT环境:vim ~/.bashrc

#添加Qt环境 -- 需要换成自己的Qt安装路径  
export PATH=/home/Qt5.10.1/5.10.1/gcc_64/bin:$PATH  
export LD_LIBRARY_PATH=/home/Qt5.10.1/5.10.1/gcc_64/lib:$LD_LIBRARY_PATH  
export QT_PLUGIN_PATH=/home/Qt5.10.1/5.10.1/gcc_64/plugins:$QT_PLUGIN_PATH  
export QML2_IMPORT_PATH=/home/Qt5.10.1/5.10.1/gcc_64/qml:$QML2_IMPORT_PATH 

设置完后,执行 source ~/.bashrc 立即生效;
(4)修改权限,执行
./linuxdeployqt-continuous-x86_64.AppImage demo -appimage
执行过程参考下图:

在这里插入图片描述

最终生成的文件列表:
在这里插入图片描述

生成后,把自己的库文件拷贝到lib下即可;
(5)生成以上打包文件后有两种操作方式:

(a)在上述目录下直接命令行执行“sudo ./demo”;
(b)双击桌面文件执行,但是桌面文件操作具有局限性,操作过于繁琐,而且对于ubuntu20.04 高版本的,在当前目录下是无法直接双击
执行,且无法设置文档为信任模式(gio 命令不支持设置 metadata::trusted yes属性),只能放到系统桌面下才能运行;
(c)Ubuntu系统下实验过:将生成的demo1打包文件夹中的demo1直接换成demo2也可行,但是得确定依赖的库文件是否能被找到,但是
最好的处理方式是每个demo重新执行打包;
(d)所有操作得保证对应可执行文件的依赖库是否被找到,可使用 ldd demo查看。

3、加壳合成一个可执行文件:
(1)下载地址: https://github.com/AppImage/AppImageKit/releases/
在这里插入图片描述
如上图所示,x86下可直接下载工具,如果是其他系统如龙芯,需要源码编译;
(2)加壳:修改可执行权限后执行:
./appimagetool-x86_64.AppImage 程序目录
生成可执行文件 demo-x86_64.AppImage,
然后执行 sudo ./demo-x86_64.AppImage

(四)国产机—龙芯

(1)因为上述工具没有支持mips,因此需要源码编译;
(2)编译linuxdeployqt:
在这里插入图片描述
(3)下载patchelf-0.12.tar.bz2可以,不能下载版本较高的,否则报错(下图是patchelf_0.14):
github地址:https://github.com/NixOS/patchelf
下载地址:https://github.com/NixOS/patchelf/releases
在这里插入图片描述
(4)其余插件可根据提示安装即可,安装完后便可正常编译成功,之后操作按照上述Linux下执行即可。
(5)待更新:源码后续研究。

(五)Linux下桌面文件(xxx.desktop)

需要修改default.desktop 文件如下:
在这里插入图片描述

注意:
(1)Icon 设置在ubuntu18.04上面不支持显示.ico格式的图标文件,ubuntu20.04可以;
(2)Exec 执行命令:ubuntu18.04下不支持以下格式输入,ubuntu20可以:
Exec=echo $PWD | sudo -S /home/xxx/xxx/demo,输入后不执行;

(3)ubuntu18.04下可在目录中双击运行,第一次运行时系统会提示为不信任文件,选择信任后即可运行,也可以放桌面上双击运行;
(4)ubuntu20.04下,只能将桌面文件拷贝到桌面才能用,但必须得有以下操作:
(a)修改权限,不能设置权限为0777,可以设置0755,否则下图中鼠标右键菜单中不会出现“允许启动”设置,相当于执行对文件设置可信任状态,点击“允许执行”;
在这里插入图片描述

(b)点击“允许执行”后,且如果文件中没有语法错误或者相关路径错误的话,桌面文件会自动更新为带图标的demo工具,如下图,但是建议最好检查下属性中“执行”是否选中为“允许执行文件”;
![在这里插入图片描述](https://img-blog.csdnimg.cn/00c511a7c7ea4e40b3d96ffd51b8254c.png在这里插入图片描述

(c)如果文件中没有语法错误或者相关路径错误,双击文件依然不运行的话,需要检查下依赖的库文件,ldd demo查看。

将多个文件打包一个.exe可执行文件通常是为了方便分发和简化用户的安装过程。在Windows环境中,有几种方法可以做到这一点: 1. **自定义编译器/IDE**: 使用一些专业的开发工具(如Visual Studio、CMake、PyInstaller等),这些工具支持将源代码(如C/C++、Python)以及资源文件合并打包exe。比如,对于C#,可以使用ClickOnce发布。 2. **资源压缩工具**: 将所有必要的文件(包括二进制文件、数据、图片等)放入一个zip或7z等压缩包中,然后用专门的工具(如NSIS)创建自解压的exe,该exe会在运行时自动提取并运行所需内容。 3. **混淆和加壳技术**: 对于C++程序,可以使用代码混淆(obfuscation)工具混淆代码,减少逆向工程的可能性,并结合代码壳(code packer)来保护版权,然后打包exe。 4. **动态链接库(DLL)**: 如果应用程序主要依赖于一些库,而不是直接包含所有的源码,可以通过编译DLL动态链接,然后主程序引用这些DLL来打包exe。 5. **捆绑软件分发工具**: 市面上有一些专门用于软件打包和分发的商业工具,例如Installshield、WiX等,它们提供了图形化界面和自动化流程,能轻松完任务。 要具体操作,你需要根据所使用的编程语言、工具链和个人需求选择合适的方法。如果你提供更详细的信息(如是用什么语言开发、有没有特定的平台要求),我可以给出更为具体的步骤指导。下面是几个相关问题: 1. 你想打包哪种类型的程序?(例如C++、Python) 2. 是否考虑过对软件进行加密或保护知识产权的需求? 3. 有没有使用过的开发环境或经验?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蕊瑞琳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值