Problema para fazer rodar em C

Iniciado por Freitas_Igor, 15 de Agosto de 2009, 17:15

tópico anterior - próximo tópico

Freitas_Igor

Galera seguinte eu to programando em C to usando o gedit para fazer os codigos ai para uso o gcc -Wall -c "nome no arquivo" para compilalo dai eh criado um arquivo .o com o mesmo nome do parametro q eu passei anteriormente.
Ate ai blz mais eu to querendo usar tipo um arquivo funcao.c main.c lib.h compilo os tres todos compilão blz ai faço gcc main.c -o executavel para ele criar o executavel pra eu rodar o programa e ele da isso:

igor@igor-laptop:~/Desktop/aulaEstrutura$ gcc main.c -o executavel
/tmp/ccspoZnX.o: In function `main':
main.c:(.text+0x3e): undefined reference to `criar'
main.c:(.text+0x6e): undefined reference to `obter_vaga'
collect2: ld returned 1 exit status

n consigo fazer o bicho rodar os arquivos estão numa mesma pasta todos os includes tão ok mais n sei o q ta dando isso alguem pode me ajudar!!??

obrigado!

HelderC

Cara, tente usar alguma IDE como o Geany ou o Code::Blocs (recomendo esse).
Todos podem ser instalados pelo Synaptic.

Lunik

#2
tente: gcc *.c -o executavel
(isso quando só houver na pasta os arquivos que quer compilar)

Normalmente você precisa passar todas as fontes que deseja compilar. Por isso em projetos grandes é bom usar o MAKE. (aqui no forum tem um topico excelente sobre o make)

Darcamo

Acontece que você tem que compilar os arquivos fonte e então linkar os arquivos objeto criados (os arquivos .o) para então obter o executável.
Se você usar o comando
gcc *.c *.h -o executavel
o gcc vai compilar os arquivos fonte e já linkar os arquivos objeto gerando então o executável, mas se você usar a opção "-c" você está dizendo para o gcc que ele deve apenas compilar, mas não linkar dessa forma você vai obter apenas os arquivos ".o".

Se preferir fazer a compilação e a linkagem separadamente pode usar os comandos
gcc -Wall -c *.c *.h
para compilar e finalmente
gcc *.o -o executavel
para linkar.

Na sua tentativa deu errado porque você linkou apenas com o ".o" do main e as funções definidas dos outros arquivos objeto não foram incluídas no executável. Por isso os erros de "undefined reference".

Continue usando o gedit e a linha de comando por enquanto para compilar. Assim você vai aprender como as coisas funcionam. Depois disso é que você pode procurar uma IDE se preferir. Partir direto para uma IDE é ruim porque as vezes você encontra problemas bestas e não entende como resolver porque sempre dependeu só da IDE.

O tópico sobre o Makefile está aqui http://ubuntuforum-pt.org/index.php/topic,21155.0.html

Freitas_Igor

vlw galera agora rodo bacana vlw aiii!