2011-03-19 13 views
5

¿Puede alguien explicarme por qué, en particular, estamos usando ./a.out para ejecutar un programa?Ejecutando un programa C en Linux

¿Hay algún significado detrás de esto?

¿Puede alguien dar una explicación?

+2

bienvenido en SO. ¿Podría tratar de formular su pregunta de manera más precisa? ¿Qué es lo que no entiendes? el '. /' delante del 'a.out'? el 'a.out' en sí mismo? ¿Qué tipo de * significado * estás buscando? –

Respuesta

3

Si se refiere a la pieza ./, es por seguridad. Windows de forma predeterminada agrega el directorio actual a PATH, que es malo (existe el riesgo de inyección de DLL, etc.). Si se refiere a a.out parte, es solo un nombre (que vino del nombre del formato a.out), que puede cambiar modificando el parámetro gcc -o.

+0

Otra manera alrededor. El nombre del formato "aout" (que ya no se usa en ningún sistema moderno) proviene del nombre de archivo 'a.out', que es el nombre de archivo tradicional para" salida del ensamblador "en los sistemas Unix. –

9

El nombre significa "assembler output" y era (y sigue siendo) el nombre predeterminado para el ejecutable generado por el compilador. La razón por la que necesita ./ en frente de ella es porque el directorio actual (.) no está en $PATH, por lo tanto, la ruta al ejecutable debe darse explícitamente.

2

Cuando se ejecuta un archivo ejecutable como una concha como bash el ejecutable debe estar en la variable de entorno PATH para bash para localizar y ejecutar el programa.

El ./ prefijo es una forma abreviada de especificar la ruta completa al ejecutable, por lo que la fiesta no tiene que consultar a la de la variable PATH (que por lo general no contiene el directorio actual) para ejecutarlo.

[Para a.out (abreviatura de "salida de ensamblador"), que es la salida ejecutable por defecto para un compilador como gcc si no se especifica ningún nombre de archivo de salida.]

0
gcc -o mynewprogram mynewprogram.c 

a.out es el nombre predeterminado para el compilador AFAIK es porque el proceso de enlace se omite y no se compila como un objeto o biblioteca.

+2

De alguna manera esto no describe el * significado detrás de eso *. –

+0

Es solo la sintaxis, perdóname. – Bytemain

1

Vale la pena que busque un poco más en C y la forma en que los programas C son compilados.

Esencialmente, su código fuente se envía a la preprocesador, donde se cargan directivas como #define y #include (por ejemplo, en la memoria). Por lo tanto, se cargan las bibliotecas que desea utilizar, p.

#include <math.h> 

, básicamente, 'pegar' el contenido de math.h en el código fuente en el punto en el que está definido.

vez que todo esto se ha ampliado a cabo, el compilador convierte el código fuente en código objeto , y es su fuente en código binario. a.out es el nombre predeterminado para el resultado si no especifica un nombre de compilación.

Cuestiones relacionadas