ubuntu环境下增加-pie选项导致可执行程序无法通过双击启动的问题

2023-05-16

在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中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu环境下增加-pie选项导致可执行程序无法通过双击启动的问题 的相关文章

  • GCC中的pie和fpie选项

    http www lingcc com 2010 01 08 10609 GCC中的pie和fpie选项 Position Independent Executable是Binutils glibc和gcc的一个功能 xff0c 能用来创建
  • Debian中文美化

    对于使用X Window的用户而言 xff0c 拥有一个漂亮的界面是非常重要的 xff0c 只有这样 xff0c 工作的时候才能心情娱悦 xff0c 否则 xff0c 看着大小不一或者是朦朦胧胧的字体 xff0c 恐怕没人会有心情做自己的工
  • ESLint 命令行

    要在Node js 上运行 ESLint xff0c 必须先安装 npm 安装好npm后 xff0c 可以运行下列命令 xff1a npm i g eslint 这表示从npm仓库安装了ESLint CLI 然后继续使用下列命令运行ESLi
  • Ubuntu18.04安装Hexo

    最近突然想搞一个自己的博客 xff0c 于是乎准备在Ubuntu上安装一下Hexo框架 xff0c 然而很不幸的是遇到了重重险阻 xff0c 踩了不少坑 xff0c 最后能艰难爬上来实属不易 xff0c 下面就给大家奉上我的 脚印 xff0
  • 使用PackageManager来获取应用信息

    PackageManager可以获取到一个APP的各项信息 xff0c 如包名 版本号 图标等信息 获取PackageManager对象的方法很简单 xff1a PackageManager packageManager 61 contex
  • activemq 动态消息队列

    前提 xff1a springboot整合activemq时利用注解及相关 配置类是可以直接 使用 activemq消息队列去处理业务逻辑的 xff0c 但是我在生产环境碰到了一个 情况是 真实数据 有几千万 直接用上面说的情况 xff0c
  • Springboot + Spring Security 实现前后端分离登录认证及权限控制

    Springboot 43 Spring Security 实现前后端分离登录认证及权限控制 前言本文主要的功能文章目录文章正文一 准备工作1 统一错误码枚举2 统一json返回体3 返回体构造工具4 pom5 配置文件 二 数据库表设计建
  • JVM内存分配规则

    JVM内存分配规则 堆内存分配 xff1a JDK8 默认的 xff0c 新生代 xff08 Young xff09 与老年代的比例值为 1 2 xff08 该值可以通过参数 XX NewRatio来指定 xff09 新生代分为 Eden和
  • RT-Thread 开发者能力认证考试样题(RCEA)

    V1 0 RT Thread 开发者能力认证考试样题 RCEA xff09 注 xff1a 样题仅为部分题目 第一小卷 单选题 40 题 40 分钟 40 0 分 1 对两个字符 a 和 b 进行初始化 xff1a char a 61 34
  • Collections.max(list) 和 Math.max() 效率比较实验

    前情提要 xff1a 在力扣 559 N叉树的最大深度 中 xff0c 官方题解出现了 Collections max 的用法 xff0c 本人使用的是 Math max 这一古老而强大的函数 为什么官方答案选用的是 list 呢 xff1
  • (原创)Lottie动画使用介绍

    前言 我们都知道 xff0c 安卓里面有三种基本的播放动画方式 xff1a 帧动画 xff0c 属性动画 xff0c 补间动画 今天介绍一种新的实现方式 xff1a Lottie动画 Lottie是爱彼迎开源的一个动画框架 可以支持iOS
  • 【JavaAgent】字节码编程 - 使用Byte-buddy工具实现插件化开发

    简介 假设我们有需求 xff1a 所有的控制器 xff08 Controller xff09 添加耗时 xff0c 对所有的服务 xff08 Service xff09 添加调用信息 xff0c 使用一个agent代理 xff0c 也就是所
  • onNewIntent详解

    记得刚开始学的时候 xff0c 感觉intent还挺简单 xff0c 结果现在总是被intent困扰 xff0c 发现自己太天真了 xff0c 为了弄清楚 xff0c 总结一下 xff0c 一 onNewIntent 老规矩 xff0c 先
  • import _ssl ImportError: DLL load failed

    问题描述 简单讲一下我的问题 xff1a 使用pycharm打开Django项目 xff08 虚拟环境编译器 xff09 xff0c 当测试发送邮件功能时 xff0c 出现报错 xff0c import ssl if we can t im
  • 【荐书】李彦宏《智能革命》:技术是时代的信仰

    我来了 xff0c 天上的云乘着风飞翔 xff0c 心中的梦占据一个反向 xff0c 方舟扬帆起航 xff0c 一路带着我们纵情歌唱 xff0c 方舟扬帆起航 xff0c 脉络就在大海之上 xff0c 进步的时光 xff0c 迎着你看涛浪潮
  • vue 打包去除console.log()

    忘记在哪里看到的 记录下 在vue config js中 xff0c 配置 chainWebpack span class token punctuation span config span class token punctuation
  • minio+thumbor

    minio 安装 span class token function wget span https dl min io server minio release linux amd64 minio span class token fun
  • axios自定义请求头跨域,thinkphp设置

    axios添加自定义请求头 在axios拦截器中 headers XXX 61 XX 配置后 thinkphp 返回跨域 需要对thinkphp中间件进行重新设置 主要配置在tp 复制 vendor topthink framework s
  • git webhook linux 切换www用户

    vim etc passwd 把 www x 1000 1000 home www sbin nologin 改成 www x 1000 1000 home www bin bash ESC键结束 wq 保存文件并退出编辑 切换www用户
  • mint下nginx和uwsgi部署django

    参考 xff1a http www cnblogs com fnng p 5268633 html 安装Nginx apt get install nginx 启动Nginx xff1a etc init d nginx start 启动

随机推荐

  • (原创)Android安装APK报错Installation failed due to: ‘INSTALL_FAILED_TEST_ONLY‘

    这个问题遇到是在vivo手机与oppo手机 xff0c 换成在华为 小米等手机中未发现该问题 其实是因为Android Studio 自3 0 开始自带一个隐藏的功能 xff0c 那就是编译打包 debug 包时 xff0c 会自动在 ap
  • strapi-api使用说明

    strapi controllers 返回项目中可用的控制器的对象 位于该 api controllers文件夹中的每个JavaScript文件都将被解析为该strapi controllers对象 由于这个对象 xff0c 您可以访问项目
  • sublime tex4配置vue开发环境

    前提 已安装package control 参考网站 https lsp sublimetext io https www prettier cn 安装包快捷键 ctrl 43 alt 43 p 输入install package 安装以下
  • win下mkcert+phpenv本地ssl环境配置

    环境win mkcert 安装过程略 使用Chocolatey安装比较方便 1 choco install mkcert 2 mkcert install 弹出窗口点安装 3 mkcert shop test 注意点 shop test 本
  • Android http post/get

    虽然在Android开发中有很多网络框架 xff0c 可是都比较臃肿 xff0c 要考虑很多请求姿势 xff0c 所以自己写了一个 感谢大家发表评论 xff01 1 网络请求一般分为post和get两种方式 xff0c 在工作中我比较常用的
  • Android相机,图库获取图片

    大家的APP中经常会有从手机相机 图库获取图片 xff0c 这里封装了方法可以方便大家 xff0c 解决了Android7 0资源uri的获取方式 xff0c 兼容SDK19以上的机子 xff0c 有权限请求整合 xff0c 欢迎大家下架使
  • 《Streaming System》流式系统-序章

    本文翻译摘抄自 Streaming System xff0c 在阅读的时候进行翻译 xff0c 同时方便广大同学 xff0c 如有错误或侵权 xff0c 烦请指出 偶尔有机会搜到了这本书籍 xff0c 还看到知乎有有问小伙伴对此书佩服的五体
  • 《Streaming System》 第二章:数据处理的四要素 What Where When and How

    本文由 Streaming System 一书第二章的提炼翻译而来 xff0c 译者才疏学浅 xff0c 如有错误 xff0c 欢迎指正 转载请注明出处 xff0c 侵权必究 本章主要介绍鲁棒的处理乱序数据的核心概念 xff0c 这些概念的
  • 《Streaming System》 第三章:Watermarks

    简介 本章主要介绍鲁棒的处理乱序数据的核心概念 xff0c 这些概念的运用使流处理系统超越批处理系统的关键所在 本章我们从流计算系统的底层机制深入来探讨一下watermark 学习这些机制有助于我们更好理解和使用watermark 我们将讨
  • Centos 7 开放查看端口 防火墙关闭打开

    Centos 7 firewall 命令 xff1a 查看已经开放的端口 xff1a firewall span class hljs attribute cmd span span class hljs subst span span c
  • linux CentOS 安装rz和sz命令 lrzsz

    lrzsz在linux里可代替ftp上传和下载 lrzsz 官网入口 xff1a http freecode com projects lrzsz lrzsz是一个unix通信套件提供的X xff0c Y xff0c 和ZModem文件传输
  • (原创)Flutter开发问题:项目启动一直卡在Running Gradle task ‘assembleDebug‘

    问题描述 按照flutter官网步骤安装Flutter SDK Android studio等 xff0c 在创建第一个flutter项目后run的过程一直是Running Gradle task assembleDebug 针对这个问题
  • Redis 分页排序查询

    Redis是一个高效的内存数据库 xff0c 它支持包括String List Set SortedSet和Hash等数据类型的存储 xff0c 在Redis中通常根据数据的key查询其value值 xff0c Redis没有条件查询 xf
  • 使用Spring实现读写分离( MySQL实现主从复制)

    1 背景 我们一般应用对数据库而言都是 读多写少 xff0c 也就说对数据库读取数据的压力比较大 xff0c 有一个思路就是说采用数据库集群的方案 xff0c 其中一个是主库 xff0c 负责写入数据 xff0c 我们称之为 xff1a 写
  • 解决 Unable to load native-hadoop library for your platform

    安装hadoop启动之后总有警告 xff1a Unable to load native hadoop library for your platform using builtin java classes where applicabl
  • [音乐] 随遇而安

    黄霑真的很适合唱这种充满了江湖气息的歌 xff0c 这首歌的经典程度不亚于 沧海一声笑 有兴趣的自己搜来听听吧 人外有人山外有山 不怕拼命怕平凡 有得有失有欠有还 老天不许人太贪 挺起胸膛咬紧牙关 生死容易低头难 就算当不成英雄 也要是一条
  • Request Body数据读取

    拦截器要读取request body数据的话需要注意一个问题 xff0c 一旦拦截器把数据流从request读取出来后 xff0c 后区的接口层就拿不到数据了 xff0c 因为流是一次性的 xff0c 那么要解决这个问题 xff0c 我们就
  • scikit-learn常用的用法及问题

    对平时用机器学习算法常遇到的问题做个总结 xff5e A 交叉验证 交叉验证是为了评估当前的模型对于整个dataset的generalization error怎么样 xff08 如果太大 xff0c 表示overfit或者underfit
  • ubuntu开启SSH服务远程登录

    ssh secure shell xff0c 提供安全的远程登录 从事嵌入式开发搭建linux开发环境中 xff0c ssh的服务的安装是其中必不可少的一步 ssh方便一个开发小组中人员登录一台服务器 xff0c 从事代码的编写 编译 运行
  • ubuntu环境下增加-pie选项导致可执行程序无法通过双击启动的问题

    在ubuntu环境下 xff0c 链接可执行文件时增加 pie选项 xff0c 双击可执行程序 xff0c 无法正常启动 对于这个现象 xff0c stackoverflow有个帖子 xff0c gcc creates mime type