linux下QT发布程序双击打不开解决方法

本文详细介绍了在Linux系统中如何打包Qt程序,包括修改可执行文件属性、解决环境问题以及创建shell脚本实现双击启动。首先,通过添加QMAKE_LFLAGS+=-no-pie清除pie属性,然后检查并调整系统环境变量,确保可执行文件能正常运行。当环境复杂时,创建shell脚本配合桌面快捷方式实现程序启动。最后,提供了创建桌面快捷方式的方法,使程序看起来更像一个独立的应用程序。
摘要由CSDN通过智能技术生成

Qt打包:

Linux系统下Qt程序的打包 - 青衣守旧人 - 博客园

 

阶段一

右键可执行程序,选择属性,可执行程序类型如果是“application/x-sharedlib”,在QT的pro文件添加如下内容,清除后重新编译release版;

QMAKE_LFLAGS += -no-pie

此时的可执行程序是“x-executable”,双击看能否启动。 

阶段二
经过阶段一如果还是打不开,此时可以写个小demo,新建一个带界面的工程,什么都不做,编译后看是否能双击打开,如果能打开,但复杂一点的工程打不开,说明是环境问题;
原因分析
双击在图形界面,环境是文件管理器,使用./是在命令行界面,也就是shell脚本,shell启动时会执行一些脚本,改变环境变量;复杂工程如果依赖三方库,直接双击可执行是打不开的。
解决方法
修改全局环境变量,把可执行程序当前路径加到如下配置文件(依赖库一般和可执行程序在同级目录):
 

命令:sudo vim /etc/ld.so.conf

           

将第三方库放到和可执行文件一个目录中,并进行如下操作:

打开 /etc/profile文件:

gedit /etc/profile

在文件的末尾添加语句:

 

执行下面指令,使设置立即生效:

sudo ldconfig

再双击可执行程序,正常可以打开。 

阶段三

项目工程太大再加上电脑上有其他软件修改环境变量,经历这些操作可能还是不能双击打开,下面介绍通过shell脚本双击启动,在用户看来形式上一样。
1、编辑一个shell脚本,例如是startApp.sh,放在可执行文件目录,内容如下:

#!/bin/bash
#workdir
workdir=$(cd $(dirname $0); pwd)
cd $workdir
./AssistantMainInterface

此时可以在终端./startApp.sh运行程序了,但双击还是打不开。

2、设置shell脚本双击可打开
打开文件管理器-编辑-首选项-行为,勾选“打开可执行文本文件时运行它们”;
右键startApp.sh,选择权限选项卡,勾选允许作为程序执行文件,此时双击“startApp.sh”可直接执行程序;

3、创建桌面快捷方式
为了看上去更像一个程序,创建一个带图标的桌面快捷方式;
在桌面创建文件/root//Desktop/zhushou.desktop,编辑vim zhushou.desktop:

[Desktop Entry]
Encoding=UTF-8
Name=ZhuShou
Comment=tool
#Exec=/root/IPDSys/bin/config/shell/shell_410/rzt_tool_start.sh
Exec=/root/桌面/app1/startApp.sh
Icon=/root/桌面/app1/app.png
Terminal=false
StartupNotify=true
Type=Application
Name[zh_CN]=ZhuShou

Qt环境下,如果你想让Linux下的应用程序双击时自动以root权限运行,通常不是通过修改应用程序本身来实现的,因为这可能会带来安全隐患。而是需要对系统的环境配置进行设置,并且遵循一定的权限管理原则。 1. 使用`setuid`或`setgid`标志:你可以创建可执行文件时使用`chmod +s`命令添加`setuid`(所有者可执行)或`setgid`(所属组可执行)属性,但这仅适用于特定用户或组,而非root。这对于普通用户来说是安全的,但对于root用户来说则无需密码即可运行。 2. 创建root shell脚本:创建一个shell脚本,该脚本首先检查当前用户是否为root,如果不是,则切换到root并执行你的Qt程序。然后,将这个shell脚本设为可执行并以root权限运行。这样可以在一定程度上避免直接暴露root权限给用户界面。 ```bash #!/bin/bash if [ "$(id -u)" != "0" ]; then sudo su -c "/path/to/your/qt_program" else /path/to/your/qt_program fi ``` 3. 使用sudo:尽管它需要输入密码,但在某些场合,可以编写一个sudoers配置文件,允许特定的应用或用户以root权限运行特定的命令,但依然会有密码提示。 4. 安全策略:最好遵循最小权限原则,只在必要时授予应用 root 权限,以免造成潜在风险。对于生产环境,应该有更精细的访问控制措施,如SELinux或AppArmor等。 注意,上述方法都存在潜在的安全隐患,应谨慎使用,特别是在生产环境中。如果需要频繁以root权限运行,建议通过SSH或其他安全的方式远程操作服务器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值