Acabei de mudar do Windows para o Ubuntu 11.10.
Escrevi o seguinte código em C com o editor de texto e salvei-o como HelloWorld.c em Documents.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
E eu iniciei o Terminal e digite os seguintes comandos:
cd Documents
gcc HelloWorld.c
Um arquivo chamado a.out, que, após algumas pesquisas no Google, é o executável. Eu digitei este comando:
a.out
Mas eu entendo
a.out: command not found
Qual passo eu dei errado?
command-line
gcc
c
yihangho
fonte
fonte
sudo chmod 777 a.out
+x
para você; você não precisachmod
do executável produzido por um compilador. A única situação comum em quegcc
falha em torná-lo executável é se ele estiver criando o arquivo em um sistema de arquivos que não o suporta ou permite (nesse caso,chmod
imediatamente depois também falharia). Além disso,777
deve ser evitado. Não há necessidade de torná-lo legível, gravável e executável por todos os usuários; se fosse necessário executarchmod
,chmod +x a.out
seria suficiente.Respostas:
Como você está executando um executável no diretório de trabalho atual, você deve prefixá-lo
./
. Portanto, para o seu programa, execute-o como./a.out
.Explicação
O terminal procura por executáveis em
$PATH
. Este é um sistema Unix variável ambiente que exibe os directórios que contêm binários do sistema (tais comols
,echo
, ougcc
). Se você chamar um executável que não esteja em um$PATH
diretório (comoa.out
), será necessário indicar seu caminho absoluto no sistema de arquivos.No terminal,
.
é um sinônimo para o diretório de trabalho atual, portanto./a.out
. Você poderia igualmente bem chamar/home/yihang/Documents/a.out
.fonte
chmod u+x a.out
permitir que o sistema o execute.Quando você executa comandos no Linux, ele pesquisa todos os diretórios listados na
PATH
variável de ambiente e, se não encontrar o comando lá, você recebe a mensagem que viu.Normalmente, fica assim:
Isso significa que ele aparecerá primeiro
/usr/local/bin
. Se não o encontrar, ele procurará/usr/bin
e assim por diante.De fato, isso é muito semelhante no DOS / Windows: existe uma variável chamada
%PATH%
que faz exatamente a mesma coisa.A diferença é que, no Windows, o diretório atual também é pesquisado. O Unix considera isso ruim porque um arquivo local (como malware) pode substituir programas importantes do sistema acidentalmente.
Se preferir, você pode fazer o Linux funcionar da mesma maneira adicionando
.
ao caminho:(Isso significa definido
PATH
como.:
mais o conteúdo existente de$PATH
.)Ele acaba parecendo algo assim (pode ser diferente na sua máquina):
Se você preferir não fazer isso, basta executar cada programa especificando o diretório explicitamente:
ou
fonte
.
aPATH
, sempre adicione-o por último.Essencialmente, o a.out é criado por padrão porque você não especificou um nome para o executável. Tente isso:
Depois de fazer isso, você poderá invocá-lo (como sugeriu Sunil) precedendo "HelloWorld" com uma barra (./):
Aqui está um link para um artigo que explica um pouco sobre por que o a.out foi criado: Escrevendo e compilando programas C no Linux .
fonte