答案1
如果你有问题,那么你可以找到 gcc 并添加行-no-pie
它是默认可执行文件,因为 Ubuntu 18.04 在 pie 方面存在问题,这就是为什么位置无关的可执行文件。就是没有 pie!然后它对我来说就没问题了。
答案2
这个答案仅存在于 Piggybacking off 的延续中Jens 的回答
-no-pie
作为 GCC 构建的一部分使用......
这是一个错误造成位置无关的可执行文件(PIE)。PIE 是现代 Linux 版本中的一项安全功能,可随机化内存地址并略微更改文件结构。PIE 二进制文件与“标准”Linux 二进制文件不同,因为 PIE 二进制文件具有不同的类型- 大多数系统(尤其是file
)会将它们视为共享库文件,而不是普通的可执行二进制文件:
$ file bin-nopie
bin-nopie: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=ee817f6d5d4f5635a981b1b837b1b0de3b16aacf, not stripped
$ file bin-pie
bin-pie: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=439fc92838d4d0981f99dd967485e5b95a5a0e7b, not stripped
Ubuntu 的文件浏览器 (Nautilus) 不进行自己的文件类型处理(而是选择使用libmagic
/ file
/ 等)。由于这些上游库已损坏,无法正确检测 PIE 构建的二进制文件,Nautilus 无法在 GUI 中将它们显示为可执行文件。因此,系统选择将它们视为任何其他共享库(即,作为不可执行文件)。
但是,这个问题可以得到缓解。开发人员可以使用-no-pie
禁用 PIE 的选项编译二进制文件(尽管这确实会损害安全性)。这将允许libmagic
/file
将二进制文件视为可执行二进制文件,并将该数据相应地传递给 Nautilus。或者,开发人员(或最终用户)可以创建.desktop
指向二进制文件的文件。这被 GNOME 团队视为“首选”解决方法,因为它允许添加元数据和图标文件,从而创造更漂亮的整体用户体验。
打开/相关的错误报告:
答案3
这与 MIME 类型有关,与文件是否可执行无关。我使用的所有脚本当然都是可执行的,但这并不能改变 MIME 类型不同的事实。
$ file /bin/busybox
/bin/busybox:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (GNU/Linux),静态链接,适用于 GNU/Linux 2.6.32,BuildID[sha1]=86b86ebdeb1e423dc1672c2a7408fb83ee70eeb1,已剥离
file ~/bin/vdprocessx265.sh
/home/me/bin/vdprocessx265.sh:Bourne-Again shell 脚本,ASCII 文本可执行文件,行数非常长
如您所见,bash 脚本虽然可执行,但却是 ASCII 文本中的 shell 脚本,而 busybox 则是 ELF 可执行脚本。
在 /etc/mime.types 上使用 grep 可以使其更加清晰。
grep "exe" /etc/mime.types
应用程序/x-可执行文件
应用程序/x-msdos-program com exe bat dll
grep "sh" /etc/mime.types
如果用户愿意,可以通过创建“.mime.types”来添加自己的类型
<---剪辑-->
文本/x-csh csh
文本/x-sh sh
有几个很好的答案如何更改特定文件类型的图标?这应该可以帮助您获得想要的结果。
这个问题的答案更加详细:文件关联存储在哪里?
@dim 我相信你会发现使用 -no-pie 开关进行编译会导致不同的结果标题
mimetype 根据文件内容猜测适当的 mime 类型。对于 ELF 文件(大多数已编译的二进制文件和共享库),标头包含一个字段 e_type,用于标识其类型。如果是 ET_DYN,则 mimetype 会将其视为共享库。
默认情况下,gcc/ld 将生成将 e_type 设置为 ET_EXEC 的二进制文件,这些文件被检测为 application/x-executable
这导致 mimetype 被猜测不同,如下所述这个 StackOverflow 答案因此图标有所不同。
资料来源:
答案4
将应用程序的名称更改为 ArucoDetect.appimage