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
+x
para ti; no necesitachmod
el ejecutable producido por un compilador. La única situación común en la quegcc
no 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,chmod
inmediatamente después también fallaría). Además, se777
debe evitar. No es necesario que todos los usuarios puedan leerlo, escribirlo y ejecutarlo; si fuera necesario correrchmod
,chmod +x a.out
serí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$PATH
directorio (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.out
permitir que el sistema lo ejecute.Cuando ejecuta comandos en Linux, busca todos los directorios enumerados en la
PATH
variable 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
PATH
a.:
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