Суть проблемы в том, что вы пытаетесь запустить программу, которая является консольным приложением, но к ней не подключен терминал. В терминале вы можете запустить свою программу, просто вызвав имя программы, но в графическом интерфейсе вам нужно явно указать, что должно быть открыто окно терминала для запуска консольных приложений (это особенно верно для рабочих столов на основе GNOME, таких как Ubuntu Unity) .
Что нужно сделать, так это создать файл .desktop
для вашей программы с 4 полями. Вот пример:
[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true
Я не знаю насчет CentOS, но что касается Ubuntu, то существует требование, согласно которому .desktop
приложения должны быть также исполняемыми, если они расположены в каком-либо каталоге. в домашнем каталоге пользователя. Файлы .desktop
, находящиеся в других каталогах, например /usr/share/applications
, этого не требуют.
Итак, как только у вас будет файл .desktop
и вы сделаете его исполняемым, вы сможете запустить программу. Важным битом является строка Terminal=true
. Это то, что скажет GUI поднять терминал и запустить там вашу программу. ПРИМЕЧАНИЕ: если ваша программа выполняет что-то и сразу же завершает работу, вам потребуется какая-то задержка или вызов getchar();
только для того, чтобы окно оставалось открытым, потому что окно терминала закроется когда программа выходит. Вот почему многие пользователи иногда недоумевают: «Почему моя программа не запускается?» Он работает, на самом деле он просто выходит слишком быстро.
Дополнительные примечания:
system("read -p 'Нажмите Enter, чтобы выйти...' var");
. Вызов read
является встроенной оболочкой и не является отдельной программой, что означает, что его можно использовать, только если вы используете оболочку, такую как bash
. Если вы используете C, сделайте это правильно, используя scanf()
или getchar()
, чтобы добавить задержку в вашу программу. Он присутствует после строки return 0;
, что означает, что ваша строка system()
не будет достигнута (программа просто завершится на операторе return
), поэтому ваше размещение паузы для программы также недействительно. .desktop
со ссылками на официальную документацию. .desktop
для каждого исполняемого файла, есть множество решений здесь. Я даже выложил туда сценарий.