TL;DR: 生产的文件实际上是一种新格式的可执行文件。它们没有问题。Nautilus/文件管理器错误地将它们识别为非可执行文件。有解决方案,例如创建一个*.desktop文件来启动应用程序。
分析
这种现象是 Electron 如何构建 Linux 二进制文件的变化的副作用。提交9294facf将二进制格式从 ELF 更改为PIE。更改很小,只影响单个文件 (BUILD.gn)。该更改已在 Electron 版本 4.0.0 开始生效。
文件管理器利用file
命令决定如何处理文件(例如打开图像查看器、文本编辑器或执行文件)。file
无法区分共享库和 PIE 可执行文件,因此误分类 PIE 文件(请参见相应的错误报告)。
解决方案
从终端运行
由于这个问题只存在于图形文件管理器中,您可以简单地从终端或脚本中运行可执行文件。这对于非技术终端用户来说有些麻烦,也不是 OP 所想要的。
等待上游修复
等待file
识别 PIE 为可执行文件。相应地,这可能会导致 Nautilus 等文件管理器正确启动 PIE。目前不清楚这是否会发生,如果发生,它可能仅包含在未来的 distro 发布中。
使用桌面文件
创建一个桌面文件来启动应用程序。这是启动桌面应用程序的常见方式。
创建一个名为myapp.desktop
的文件,并包含以下内容。
[Desktop Entry]
Name=My Application
Exec=/path/to/binary
Terminal=false
Type=Application
StartupNotify=true
Encoding=UTF-8
然后,通过发出
chmod +x myapp.desktop
命令标记桌面文件为可执行。双击该文件应该如预期地启动应用程序。
更多信息
在electron-packager项目中的相应讨论:https://github.com/electron-userland/electron-packager/issues/901。(要点:此问题不是由 electron-packager 导致的,请查看上游)
在electron项目中的相应问题是https://github.com/electron/electron/issues/15406。(要点:他们想在Linux上启用PIE。不是我们的错误,请查看上游)
$./app-name
,这在上面提到的/issues/901链接中有说明。我在Ubuntu上运行了我的应用程序。 - Jacob David C. Cunningham.desktop
文件的方法,对于那些不知道的人:请记得将该文件放置在~/.local/share/applications
中,以便 Gnome 桌面看到它,扫描它并在全局菜单系统中为您的应用程序创建菜单/图标条目。此外,除非您的应用程序支持它,否则您可能不需要StartupNotify=true
。https://developer.gnome.org/integration-guide/stable/startup-notification.html.en - abulka