首页 > 系统相关 >ubuntu环境下因pie选项导致双击启动失败的问题

ubuntu环境下因pie选项导致双击启动失败的问题

时间:2023-12-31 16:33:55浏览次数:31  
标签:下因 app pie desktop application mime type 双击

在ubuntu环境下,链接可执行文件时增加-pie选项,双击可执行程序,无法正常启动。

对于这个现象,stackoverflow有个帖子,gcc creates mime type application/x-sharedlib instead of application/x-application,介绍的比较清晰,如下是相关的摘抄。

gcc doesn't set the mime type. mimetype guesses the appropriate mime type based on the contents of the file. For ELF files (most compiled binaries and shared libraries), the header contains a field e_type which identifies its type. If it is ET_DYN, then mimetype will treat it as a shared library.

By default, gcc/ld will produce binaries which set e_type to ET_EXEC, which get detected as application/x-executable. When the command-line option -pie is used, a position-independent executable is created, which may, like shared libraries, be loaded at different addresses and still work. Because this works so much like a shared library, to avoid too many changes to the loader, such binaries get marked as ET_DYN, even though they can be executed directly.

Some Linux distributions, yours included, have set -pie as the default. It's still possible to override this with -no-pie, but the fact that the mime type is misdetected should not be seen as a bug, and unless you know what you're doing, you shouldn't override it. -pie allows for some extra security protections that are fundamentally incompatible with -no-pie.

处理方法有如下:

方法一

链接可执行程序时,去掉-pie选项,增加-no-pie选项。
本方法降低了程序的安全性,不推荐使用。

方法二

参考恢复文件管理器中鼠标双击运行ELF可执行文件的功能,修改mime的配置,执行如下步骤:

  • 修改文件/usr/share/mime/packages/freedesktop.org.xml
  • 更新mime数据库,执行命令sudo update-mime-database /usr/share/mime

假如用户具备丰富的Linux和ubuntu使用经验,可以使用本方法。
但考虑到ubuntu版本比较多,本方法的兼容性可能没有那么好,毕竟不同版本ubuntu的配置文件,具体内容可能存在出入,指导用户修改配置的文档没有那么好写。

方法三

修改用户的操作习惯,指导用户通过快捷方式来启动程序。
创建快捷方式的方法,可参照官方指导UnityLaunchersAndDesktopFiles
操作步骤如下:

  • 创建app.desktop文件,样例内容如下
    [Desktop Entry]
    Version=1.0 # version of application
    Name=application name
    Comment=Comment for the application
    Exec=/path/to/application/startup.sh
    Icon=/path/to/application/icon.png
    Terminal=false
    Type=Application
    Categories=Utility;Application;
    
  • app.desktop增加可执行权限,执行如下命令:
    chmod +x app.desktop
    
  • app.desktop放置到应用目录下,执行如下命令:
    cp app.desktop /usr/share/applications/
    cp app.desktop ~/.local/share/applications/
    
  • app.desktop放到用户桌面。
    cp app.desktop ~/Desktop
    

本方法对于用户而言基本没有什么难度,新增的开发工作量其实并不大。
另行,使用脚本来启动程序,一些简单的操作比如环境检测、环境初始化类的操作,可以迁移到脚本中实现,简单、好用。

另外对于清除RPATH后导致应用程序无法直接启动的问题,可以通过本方法规避,即在脚本中修改LD_LIBRARY_PATH,将程序依赖库的路径写入到LD_LIBRARY_PATH中。

标签:下因,app,pie,desktop,application,mime,type,双击
From: https://www.cnblogs.com/jackieathome/p/17937655

相关文章

  • 实现MFC中CListCtrl双击单元格获取文本
    1.在类中定义CEdit控件CEdit*m_edit;2.窗口OnInitDialog创建窗口并设置父窗口为CListCtrl,设置字体m_edit=newCEdit();m_edit->Create(ES_LEFT|WS_CHILD|WS_TABSTOP|WS_BORDER,CRect(10,10,100,100),&m_lstRecord,1);m_edit->SetFont(......
  • 「校园Pie」第二站赴上海科技大学:共同探讨大模型如何助力企业智能决策
    PieCloudDB社区校园行系列活动「校园Pie」旨在促进产学研合作,提供一个与高校交流的平台。通过分享行业动态与前沿技术、产业界案例与应用以及云原生数据库技术的应用与实践等内容,帮助学生了解最新的数据库发展趋势和相关技术应用。「校园Pie」第二站走进上海科技大学,吸引了众多......
  • 巧妙使用Vue.extend继承组件实现el-table双击可编辑(不使用v-if和v-else)
    问题描述有一个简单的表格,产品要求实现双击可编辑看了一下网上的帖子,大多数都是搞两部分dom,一块是输入框,用于编辑状态填写;另一块是普通标签,用于在不编辑显示状态下呈现单元格文字内容。再加上一个flag标识搭配v-if和v-else去控制编辑状态、还是显示状态。大致代码如下:<el-t......
  • 如何实现双击文本消息放大
    如何实现双击文本消息放大1、需要先创建一个RCTextMessageCell的category。添加一个代理@property(nonatomic,weak)iddelegate和其代理方法(void)doubleTapTextMessage:(RCMessageModel*)model;2、在category中重写-(void)initialize方法,添加手势。并将代理抛出去。3......
  • luckysheet 双击单元格 浮动单元格错位问题
    U1S1用luckysheet久了真的会很不幸。  问题描述(部分文字已经擦掉了):弹窗下会sheet出现双击显示异常的情况,如果只是文本框还好,解决不了还能凑合用用,直到今天我发现复制日期后,直接双击会自动带个date-picker,然后这个东西也错位,我真的是艹了。最关键是这个东西不在已经支持的......
  • 电脑上软件双击打开没反应
    今天遇到一个很少见的问题,双击电脑上快捷方式没有反应。一般都会有个提示,根据提示判断问题。去安装路径下尝试打开也没用,判断不是快捷方式的原因。管理员权限打开也没用,杀毒软件退出也没用,也不是权限的问题。连接的官网也可以打开,不是网络原因。几个常见的原因也被排除了。最......
  • 云原生向量计算引擎 PieCloudVector:为大模型提供独特记忆
    拓数派大模型数据计算系统(PieDataComputingSystem,缩写:πDataCS)在10月24日程序员节「大模型数据计算系统」2023拓数派年度技术论坛正式发布。πDataCS以云原生技术重构数据存储和计算,「一份存储,多引擎数据计算」,让AI模型更大更快,全面升级大数据系统至大模型时代。除云原生虚拟数......
  • 关于Unity的Piexels Per Unit:美术素材到底要画多大?显示多大?
    问题一:Unity的一个单位(unit)是啥?就是场景里面的这样一个小格子。 新建一个square,它的默认scale是1,可以正正好塞满1个unit。 点开square的sprite,可以看见(①)图片尺寸是256x256像素,也就是你导入工程文件的图片文件的尺寸。那么它为啥能正好塞满1个unit呢?256像素和1个unit的边......
  • allure直接到文件夹下,双击index.html无法展示数据,显示loading
    因为直接allure报告浏览器是打不开的,需要用allure命令渲染之后打开参能展示渲染效果解决方法:1、allureopen报告所在地址的文件夹名称/   allureopen测试报告/         2、写txt文件,内容:allureopen测试报告/,修改后缀为bat        ......
  • WPF 最大化,最小化,关闭,拖拽,双击事件
    十年河东,十年河西,莫欺少年穷学无止境,精益求精代码如下publicMainView(){InitializeComponent();//最小化btnMin.Click+=(s,e)=>{this.WindowState=WindowState.Minimized;};//最大化b......