Acabo de cambiar de Windows a Ubuntu 11.10.
Escribí el siguiente código en C con el editor de texto y lo guardé como HelloWorld.c en Documentos.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Y comencé la Terminal e ingresé los siguientes comandos:
cd Documents
gcc HelloWorld.c
Un archivo llamado a.out, que, después de una búsqueda en Google, es el ejecutable. Ingresé este comando:
a.out
Pero consigo
a.out: command not found
¿Qué paso hice mal?
command-line
gcc
c
yihangho
fuente
fuente

sudo chmod 777 a.out+xpara ti; no necesitachmodel ejecutable producido por un compilador. La única situación común en la quegccno se puede hacer que sea ejecutable es si está creando el archivo en un sistema de archivos que no lo admite ni lo permite (en cuyo caso,chmodinmediatamente después también fallaría). Además, se777debe evitar. No es necesario que todos los usuarios puedan leerlo, escribirlo y ejecutarlo; si fuera necesario correrchmod,chmod +x a.outsería suficiente.Respuestas:
Como está ejecutando un archivo ejecutable en el directorio de trabajo actual, debe agregarle el prefijo
./. Entonces, para su programa, ejecútelo como./a.out.Explicación
El terminal busca ejecutables en
$PATH. Este es un Unix variable de entorno que enumera los directorios que contienen los binarios del sistema (tales comols,echo, ogcc). Si llama a un ejecutable que no está en un$PATHdirectorio (comoa.out), debe indicar su ruta absoluta en el sistema de archivos.En la terminal
.es un sinónimo del directorio de trabajo actual, por lo tanto./a.out. Igualmente podrías llamar/home/yihang/Documents/a.out.fuente
chmod u+x a.outpermitir que el sistema lo ejecute.Cuando ejecuta comandos en Linux, busca todos los directorios enumerados en la
PATHvariable de entorno, y si no encuentra el comando allí, recibirá el mensaje que ha visto.Por lo general, se ve así:
Eso significa que se verá primero
/usr/local/bin. Si no lo encuentra allí, mirará hacia adentro/usr/bin, y así sucesivamente.De hecho, esto es muy similar en DOS / Windows: hay una variable llamada
%PATH%que hace exactamente lo mismo.La diferencia es que, en Windows, también se busca en el directorio actual. Unix considera esto malo porque un archivo local (como el malware) puede anular accidentalmente importantes programas del sistema.
Sin embargo, si lo prefiere, puede hacer que Linux funcione de la misma manera agregando
.a la ruta:(Eso dice establecer
PATHa.:más los contenidos existentes de$PATH).Termina luciendo así (puede ser diferente en su máquina):
Si prefiere no hacerlo, simplemente puede ejecutar cada programa especificando el directorio explícitamente:
o
fuente
.aPATH, siempre añadirlo pasado.Esencialmente, el a.out se crea de manera predeterminada porque no especificó un nombre para el ejecutable. Intenta esto en su lugar:
Una vez que haga eso, debería poder invocarlo (como sugirió Sunil) anteponiendo "HelloWorld" con una barra diagonal (./):
Aquí hay un enlace a un artículo que explica un poco sobre por qué se crea el a.out: Escritura y compilación de programas C en Linux .
fuente