um programa feito em c é executado em duplo clique no windows mas não no linux

4

Eu fiz um programa de adição simples em C em ambos OS, Linux (Ubuntu e CentOS) e Windows 7 com o mesmo código-fonte, que é o seguinte:

#include <stdio.h>
int main(){
int a,s,d;

printf("type the values u want to add and give tab between them\n");

scanf("%d %d",&a,&s);

d=a+s;

printf("addition is %d",d);

return 0;

system("read -p 'Press Enter to EXIT...' var");
}

No Windows, ele é executado quando eu clico duas vezes em addition.exe , mas no Ubuntu (também no CentOS) quando clico no arquivo executável addition , nada acontece. Não roda nem abre um terminal. No entanto, ele é executado quando eu digito ./addition em um terminal.

Mas quero executá-lo clicando duas vezes nele. O que devo fazer?

As propriedades desses arquivos estão nesta imagem:

Propriedadesdoarquivoexecutável"adição"

Além disso, não há opção como "abrir no terminal" em aberto com a seção de propriedades.

Eu também tentei criar o arquivo .desktop , que é o seguinte:

[Desktop Entry]
Name=addition
Type=Application
Exec=/media/smit/D/smits programs of c/projects by code blocks/02U/addition/bin/Debug/addition
Terminal=true

Quando clico em addition.desktop , ele diz que ocorreu um erro ao iniciar o aplicativo.

Eu também tentei abri-lo copiando este arquivo da área de trabalho para /usr/share/applications .

    
por voldimot 08.05.2017 / 06:47

1 resposta

10

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 chamada read é um shell embutido e não é um programa independente , o que significa que ele só pode ser usado se você usar um shell, como bash . Se você estiver usando C, faça isso corretamente usando scanf() ou getchar() para adicionar atraso ao seu programa. Ele está presente após return 0; line, o que significa que sua linha system() não será alcançada (o programa só será encerrado em return 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.
por 08.05.2017 / 07:55