Исполняемый файл, не распознаваемый Наутилусом - PullRequest
1 голос
/ 08 марта 2019

Невозможно создать исполняемый файл приложения Electron с помощью следующей команды:

electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds

Файл сборки, который является файлом общей библиотеки (application / x-sharedlib), не выполняется в ОС Ubuntu 18.

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 08 марта 2019

TL; DR: созданные файлы на самом деле являются исполняемыми файлами нового формата.С ними все в порядке.Наутилус / файловые менеджеры по ошибке не распознают их как исполняемые файлы.Существуют решения, такие как создание файла * .desktop для запуска приложения.

Анализ

Это явление является побочным эффектом изменения в том, как Electron создает двоичные файлы Linux.Коммит 9294facf изменил двоичный формат с ELF на PIE .Изменение довольно мало и влияет только на один файл (BUILD.gn).Изменение появилось в Electron начиная с версии 4.0.0.

Файловые менеджеры используют команду 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

Затем отметьте исполняемый файл рабочего стола, введя chmod +x myapp.desktop,Двойной щелчок по файлу должен запустить приложение, как и ожидалось.


Дополнительная информация

Соответствующее обсуждение в проекте электронного упаковщика: https://github.com/electron-userland/electron-packager/issues/901.(Суть: эта проблема не была вызвана электронным упаковщиком, смотрите вверх по течению)

Соответствующая проблема в электронном проекте: https://github.com/electron/electron/issues/15406. (Суть: они хотели включить PIE в Linux. Не наша ошибкасмотри вверх по течению)

0 голосов
/ 08 марта 2019

Для Linux (Ubuntu):

  1. Пакет понижения версии Electron:

    npm install electronic@3.1.6 --save-dev

Для глобальных (при необходимости)

npm install -g electron@3.1.6

Выполнить команду «электронный упаковщик» - для linux:

электрон-упаковщик.электронное учебное приложение - overwrite --asar --platform = linux --arch = all --prune = true --out = release-builds

Это приведет к 4Папки Linux (arch = all).Выберите рабочий исполняемый файл в соответствии с вашей ОС.

0 голосов
/ 08 марта 2019

Эта проблема возникает, когда electron-packager используется для упаковки приложения Linux с версией Electron 4.0.x, тогда как не было проблем с предыдущими версиями 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.

...