鹦鹉螺无法识别电子可执行文件

Cat*_*yst 11 nautilus electron electron-packager

我无法Electron App使用以下命令构建 a 的可执行文件:

electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds
Run Code Online (Sandbox Code Playgroud)

构建文件是一个共享库文件 (application/x-sharedlib),不在Ubuntu 18. 相反,我在 Nautilus 中打开文件时收到以下错误消息:

无法显示“电子教程应用程序”

没有为“共享库”文件安装应用程序。您要搜索打开此文件的应用程序吗?

[否] [是]

有什么办法可以做到这一点吗?

snw*_*flk 11

TL;DR:生成的文件实际上是一种新格式的可执行文件。他们没有任何问题。Nautilus/文件管理器错误地不将它们识别为可执行文件。有一些解决方案,例如创建 *.desktop 文件来启动应用程序。

分析

这种现象是 Electron 构建 Linux 二进制文件方式发生变化的副作用。提交9294facf将二进制格式从 ELF 更改为PIE。更改非常小,仅影响单个文件 (BUILD.gn)。从 4.0.0 版本开始,这一变化已经登陆 Electron。

文件管理器利用该file命令来决定如何处理文件(例如,打开图像查看器、文本编辑器或执行文件)。file无法区分共享库和 PIE 可执行文件,因此错误分类 PIE 文件(请参阅相应的错误报告)。

解决方案

从终端运行

由于该问题仅存在于图形文件管理器中,您可以简单地从终端或脚本运行可执行文件。这在某种程度上涉及非技术最终用户,而不是 OP 想要的。

等待上游修复

等待 file将 PIE 识别为可执行文件。反过来,这可能会导致 Nautilus 等文件管理器正确启动 PIE。目前尚不清楚这是否或何时会发生。如果发生这种情况,它可能只会包含在未来的发行版中。

使用桌面文件

创建桌面文件以启动应用程序。无论如何,这是桌面应用程序启动的常见方式。

创建一个包含myapp.desktop以下内容的文件。

[Desktop Entry]
Name=My Application
Exec=/path/to/binary
Terminal=false
Type=Application
StartupNotify=true
Encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

然后,通过发出chmod +x myapp.desktop. 双击该文件应按预期启动应用程序。


更多信息

electron-packager 项目中的相应讨论:https : //github.com/electron-userland/electron-packager/issues/901。(要点:这个问题不是由电子包装器引起的,请看上游)

电子项目中对应的 issue 是https://github.com/electron/electron/issues/15406。(要点:他们想在 Linux 上启用 PIE。不是我们的错误,请看上游)


小智 0

electron-packager当使用 Electron 版本 4.0.x 打包 Linux 应用程序时,这是一个问题,而以前的 Electron 版本(例如 3.1.x)则没有问题。

由于某种原因,在 Electron 4.0.x 中,生成的应用程序文件是共享库而不是可执行文件。

在终端窗口中,file在应用程序文件路径上运行命令会给出:

ELF 64 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,适用于 GNU/Linux 3.2.0,BuildID[sha1]= b9e8ba37118dad1bf605affef41026f813215bc6,剥离

而以前是:

ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,适用于 GNU/Linux 2.6.32,已剥离

幸运的是,尽管很麻烦,仍然可以通过从终端窗口启动应用程序来运行应用程序,例如将应用程序文件图标拖到终端提示符上,然后键入 Enter。