O núcleo do problema é que você está tentando executar o programa, que é o aplicativo de console, mas você não tem um terminal conectado a ele . No terminal você pode executar seu programa apenas chamando o nome do programa, mas na GUI você precisa especificar explicitamente que deve haver uma janela de terminal para executar aplicativos de console (isso é particularmente verdadeiro para desktops baseados no GNOME, como o Unity do Ubuntu) .
O que deve ser feito é que você também precisa criar um arquivo .desktop
para o seu programa com 4 campos. Aqui está um exemplo:
[Desktop Entry]
Name=MyProg
Type=Application
Exec=/home/xieerqi/example_directory/hello_world_prog
Terminal=true
Eu não sei sobre o CentOS, mas no que diz respeito ao Ubuntu, é necessário que .desktop
aplicações sejam executáveis também se elas estiverem localizadas em qualquer diretório sob o diretório home do usuário . .desktop
arquivos que vivem em outros diretórios, como /usr/share/applications
, não exigem isso.
Portanto, depois de ter o arquivo .desktop
em vigor e torná-lo executável, você poderá executar o programa. O bit importante é Terminal=true
line. É o que dirá à GUI para levantar um terminal e executar seu programa lá. OBSERVAÇÃO : se o seu programa executa coisas e sai imediatamente, você precisará ter algum tipo de atraso ou getchar();
para manter a janela aberta, porque a janela do terminal sairá quando o programa terminar. É por isso que muitos usuários às vezes ficam confusos "Por que meu programa não está em execução?" Corre, na realidade, apenas sai muito rápido.
Notas adicionais :
- elimine
system("read -p 'Press Enter to EXIT...' var");
. A chamadaread
é um shell embutido e não é um programa independente , o que significa que ele só pode ser usado se você usar um shell, comobash
. Se você estiver usando C, faça isso corretamente usandoscanf()
ougetchar()
para adicionar atraso ao seu programa. Ele está presente apósreturn 0;
line, o que significa que sua linhasystem()
não será alcançada (o programa só será encerrado emreturn
statement), portanto, a colocação da pausa para o programa também é inválida. - Leia este post no AskUbuntu, por exemplo, sobre o arquivo
.desktop
adequado com links para documentação oficial . - Se você está se sentindo preguiçoso e não quer fazer
.desktop
arquivos para cada arquivo executável, há muitas soluções aqui . Eu até publiquei um script lá também.