Problemas com o gcc

Iniciado por Chico Sokol, 27 de Agosto de 2008, 22:10

tópico anterior - próximo tópico

Chico Sokol

Olá, compilei um arquivo em c pelo gcc e gerei um arquivo executável (na teoria). Quando eu tento executá-lo na linha de comando acontece o seguinte:


-desktop:~/Área de Trabalho$ gcc -Wall -ansi -pedantic -c malocado.c -o malloc
-desktop:~/Área de Trabalho$ ./malloc
bash: ./malloc: impossível executar arquivo binário


O problema com certeza não é com o código em c, pois ao compilar no windows, o programa rodou.
Gostaria de saber se alguém sabe qual é o problema, pois preciso rodar esse programa no linux.
Obrigado,
Chico

bred81

Citação de: Chico Sokol online 27 de Agosto de 2008, 22:10
Olá, compilei um arquivo em c pelo gcc e gerei um arquivo executável (na teoria). Quando eu tento executá-lo na linha de comando acontece o seguinte:


-desktop:~/Área de Trabalho$ gcc -Wall -ansi -pedantic -c malocado.c -o malloc
-desktop:~/Área de Trabalho$ ./malloc
bash: ./malloc: impossível executar arquivo binário


O problema com certeza não é com o código em c, pois ao compilar no windows, o programa rodou.
Gostaria de saber se alguém sabe qual é o problema, pois preciso rodar esse programa no linux.
Obrigado,
Chico
Compila assim:
no caso:
Citargcc -Wall -ansi -pedantic -o  malloc malocado.c
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...

fpissarra

Citação de: Chico Sokol online 27 de Agosto de 2008, 22:10
Olá, compilei um arquivo em c pelo gcc e gerei um arquivo executável (na teoria). Quando eu tento executá-lo na linha de comando acontece o seguinte:


-desktop:~/Área de Trabalho$ gcc -Wall -ansi -pedantic -c malocado.c -o malloc
-desktop:~/Área de Trabalho$ ./malloc
bash: ./malloc: impossível executar arquivo binário


O problema com certeza não é com o código em c, pois ao compilar no windows, o programa rodou.
Gostaria de saber se alguém sabe qual é o problema, pois preciso rodar esse programa no linux.
Obrigado,
Chico

Explicação para o comentário de bred81... Note que sua linha de comando contém a chave -c que não dá oportunidade ao compilador de chamar o linker e adicionar as referências às biblitecas (libc e outras)... você só compilou, não linkou nada... Assim, retirando o -c o linker é chamado e o arquivo se torna realmente "executával", não apenas um arquivo objeto intermediário... Pessoalmente gosto de criar um Makefile:




malloc: malloc.o
  gcc -o malloc malloc.o

malloc.o: malloc.c
  gcc -O2 -c -mtune=pentium4 malloc.c




É claro que a otimização pode ser mais ou menos agressiva (-O3 ou -O1, ou ainda, nenhuma) e o "ajuste fino" pode ser feito para outros processadores (ou ser mantido genérico), mas note que a compilação é separada da linkedição...

[[]]s
Fred

Darcamo

Tem um tópico bem antigo que criei explicando o básico de como criar um makefile aqui
http://ubuntuforum-br.org/index.php/topic,21155.0.html

fpissarra

Citação de: Darcamo online 28 de Agosto de 2008, 23:13
Tem um tópico bem antigo que criei explicando o básico de como criar um makefile aqui
http://ubuntuforum-br.org/index.php/topic,21155.0.html

Excelente artigo!! :)

bred81

Realmente, não tinha percebido isso.
Depois que você falou, eu fui testar e, tava erradíssimo!
Muito obrigado!
O que o Mario foi fazer no pscicólogo?
- Ele estava passando por uma fase difícil...