(предупреждение, которое появляется) На Ubuntu 18.04 я скомпилировал пример c ++, который включал только stdio.h и пустую основную функцию, используя g++ test.cpp -o test
,
Никаких ошибок не появилось, и у меня не было проблем с запуском его из терминала.
Однако, как только я захожу на nautilus и пытаюсь запустить его, нажав на test
Появляется предупреждение с просьбой выбрать программу для открытия общей библиотеки.
Как мне убедиться, что программа скомпилирована как исполняемый файл / рассматривается файловым менеджером как исполняемый файл?
Редактировать: вывод статистики на исполняемый файл (перекомпилировано и изменено имя на asdff):
File: asdff
Size: 10600 Blocks: 24 IO Block: 4096 regular file
Device: 808h/2056d Inode: 4200517 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ miguel) Gid: ( 1000/ miguel)
Access: 2018-05-18 15:22:58.009993285 +0100
Modify: 2018-05-18 15:22:58.009993285 +0100
Change: 2018-05-18 15:22:58.009993285 +0100
Birth: -
df output on the same executable:Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda8 128206036 102694048 18956444 85% /
desktop entry:
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=asdff
Exec=./home/miguel/Desktop/asdff
Icon=/home/miguel/Desktop/index.png
Я заметил, что вы пытались использовать файл рабочего стола. Это хорошо.
Поместите файл рабочего стола в нужное место для запуска приложений и откройте его таким образом, а не с помощью Nautilus. Это место $HOME/.local/share/applications
, Я верю.
Этот ответ предполагает ваш test
программа лежит на вашей домашней папке и что /home
имеет свой собственный раздел, с noexec
опция (это по умолчанию в Ubuntu).
man mount
говорит:
поехес Не разрешайте прямое выполнение каких-либо двоичных файлов на смонтированном
файловая система.
Это означает, что ваша система не позволяет запускать тестовую программу в вашей домашней папке.
Если это правда, вы можете переместить вашу программу за пределы /home
или измените способ монтирования домашнего раздела, отредактировав /etc/fstab
файл. Увидеть man fstab
, но в основном вы хотите добавить exec
вариант.
Другая гипотеза:
test
Программа не имеет разрешения на выполнение. Проверьте это с $stat test
,test
, Переименуйте вашу программу.Запустите вашу программу в эмулятор терминала на командная строка, используя ваш интерактив ракушка. Знать о PATH
переменная (вы можете изменить его, настроив интерактивную оболочку, например, в ~/.bashrc
). Ваша оболочка будет использовать execve (2) (после подстановкаЗапустить свой исполнимый двоичный (поэтому он должен оставаться на каком-то исполняемом разделе, как ответил YSC и быть исполняемым — см. стат (2)). Вы хотите увидеть стандартный вывод а также STDERR выводы вашей программы. Смотрите также этот ответ.
использование g++
со всеми предупреждениями и отладочной информацией, так g++ -Wall -Wextra -g
, Избегайте имен test
ваша программа (это имя конфликтует с Тест (1)). Если ваш исполняемый файл использует другие библиотеки, вам может потребоваться указать некоторые RPATH во время ссылки.
Только когда ваша программа графический интерфейс пользователя программа (например, кодируется для инструментарий виджетов лайк Qt) если вы хотите (в конечном итоге) иметь возможность запустить его на рабочем столе одним щелчком мыши (подробности могут быть связаны с вашим окружение рабочего стола). Вы будете беспокоиться об этом гораздо позже (и, вероятно, даже не должны, и оставите это бремя для своего пользователя или для упаковщик вашей программы).
Я убедился, что программа [….] рассматривается файловым менеджером как исполняемая программа?
Это вопрос системного администратора, и он может зависеть от вашего окружение рабочего стола или же оконный менеджер. Я не буду беспокоиться сначала, но позже у вас могут быть некоторые спецификация ввода рабочего стола (некоторые файлы заканчиваются на .desktop
) описание вашей программы. Так что используйте редактор для создать это asdff.desktop
текстовый файл (это, вероятно, должно войти в ваш $HOME/Desktop/
директории и должны указывать абсолютные пути к файлам).
Exec=./home/miguel/Desktop/asdff
.
это опечатка, должно быть Exec=/home/miguel/Desktop/asdff
без какой-либо точки.
Каждая программа в Linux запускается execve (2) (выполняется оболочкой, средой рабочего стола или другой программой). Вам следует использовать оболочку в эмуляторе терминала для запуска большинство ваши программы, особенно при их разработке. И вы, конечно, должны ожидать, что ваши пользователи будут запускать вашу программу со своей оболочкой (я ненавижу запускать программы с помощью мыши), возможно, в некоторых сценарий оболочки объединяя вашу программу с другими. Читайте также о Философия Unix.