2010-09-18 17 views
14

puedo compilar este programa:binarios gcc compilado dan "no se puede ejecutar el archivo binario"

#include <stdio.h> 

int main() 
{ 
    printf("Hello World!"); 
    return 0; 
} 

Con este comando:

gcc -c "hello.c" -o hello 

Y cuando intento ejecutar hola, me sale

bash: ./hello: Permission denied 

Porque los permisos son

-rw-r--r-- 1 nathan nathan 856 2010-09-17 23:49 hello 

¿Por alguna razón?

Pero lo que sea ... después de cambiar los permisos y tratando de ejecutar de nuevo, consigo

bash: ./hello: cannot execute binary file 

estoy usando gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Qué am Estoy haciendo mal aquí? Tiene que ser obvio ... es demasiado tarde para seguir usando mis ojos cansados ​​para tratar de resolver este problema simple ...

P.S. Sí (a veces) trabajo en programas más sofisticados que Hello World, pero gcc lo hace de manera general ...

+2

Ejecutar: * * hola archivo y pegar el resultado aquí. Deberías compilar con: gcc hello.c -o hola – karlphillip

+0

Ugh, -c was it, thanks. –

+0

** Siempre ** pregunte todas las advertencias y la información de depuración (por ejemplo, 'gcc -Wall -g hello.c -o hello') –

Respuesta

22

Tome -c. Eso es para hacer archivos de objeto, no ejecutables.

+0

Solo para agregar, el archivo' hello' que usted hace es un archivo de objeto (si no fuera así) obvio). Debería llamarse 'hello.o' si construye con la opción' -c'. – Starkey

6

La bandera -c indica que no debe vincularse, por lo que tiene un archivo de objeto, no un ejecutable binario.

De hecho, si se ejecutó esto sin la bandera -o, se verá que el archivo de salida por defecto sería hello.o.

Como referencia (y se ríe), la entrada del hombre en la bandera -c:

-c Compile or assemble the source files, but do not link. The linking stage simply is not done. 
    The ultimate output is in the form of an object file for each source file. 

    By default, the object file name for a source file is made by replacing the suffix .c, .i, .s, 
    etc., with .o. 

    Unrecognized input files, not requiring compilation or assembly, are ignored. 
Cuestiones relacionadas