Problemas com a compilação

Problemas com a compilação

by Martin Ichilevici de Oliveira -
Number of replies: 3
Olá.

Estou recebendo alguns (vários) warnings quando compilo usando as opções indicadas.

ep: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:65: multiple definition of `_start'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o:/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:65: first defined here
ep: (.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: (.rodata+0x0): first defined here
ep: In function `_fini':
/build/buildd/glibc-2.9/csu/../sysdeps/generic/initfini.c:109: multiple definition of `_fini'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crti.o:/build/buildd/glibc-2.9/csu/../sysdeps/generic/initfini.c:109: first defined here
ep: (.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: (.rodata.cst4+0x0): first defined here
ep: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: (.data+0x0): first defined here
ep: In function `__data_start':
(.data+0x4): multiple definition of `__dso_handle'
/usr/lib/gcc/i486-linux-gnu/4.3.3/crtbegin.o: (.data+0x0): first defined here
ep: In function `_init':
/build/buildd/glibc-2.9/build-tree/i386-libc/csu/crti.S:15: multiple definition of `_init'
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crti.o:/build/buildd/glibc-2.9/build-tree/i386-libc/csu/crti.S:15: first defined here
/tmp/ccsyid0p.o: In function `le_linha_arquivo':
ep1-5898512.c: (.text+0x0): multiple definition of `le_linha_arquivo'
ep: (.text+0xb4): first defined here
/tmp/ccsyid0p.o: In function `main':
ep1-5898512.c: (.text+0x170): multiple definition of `main'
ep: (.text+0x23c): first defined here
/usr/lib/gcc/i486-linux-gnu/4.3.3/crtend.o: (.dtors+0x0): multiple definition of `__DTOR_END__'
ep: (.dtors+0x4): first defined here
collect2: ld returned 1 exit status

Pesquisando um pouco, encontrei aqui (ítem 5.2.1) que ao utilizar a opção
-nostartfiles evito estes multiple definitions. De fato, ao utilizá-la, muitos são eliminados, mas permaneço com estes:

ep1-5898512.c: (.text+0x0): multiple definition of `le_linha_arquivo'
ep: (.text+0xb4): first defined here
/tmp/ccUBpRKD.o: In function `main':
ep1-5898512.c: (.text+0x170): multiple definition of `main'
ep: (.text+0x23c): first defined here
collect2: ld returned 1 exit status

Como posso proceder? Não sei se usar
-nostartfiles o é uma alternativa válida, mas mesmo assim continuo com os outros erros.

Estou com o gcc 4.3.3, se faz alguma diferença.

Obrigado,
Martin
In reply to Martin Ichilevici de Oliveira

Re: Problemas com a compilação

by Natan Costa Lima -
Vc fez com mais de um arquivo?
Mande o(s) arquivo(s) para eu ver.

Esse erro aparece se vc definir duas vezes as funções citadas, Pode ser feito sem querer com um include errado..


Me mande o código para eu dizer melhor.

Acho q o prof colocou no site mas se não viu meu email é:
lima.natan@gmail.com
In reply to Martin Ichilevici de Oliveira

Re: Problemas com a compilação

by Andre Manoel -
Não sei se é o caso, mas eu já recebi umas mensagens desse tipo quando chamei o gcc passando os parâmetros errados, fazendo coisas como gcc (...) -o arquivo.c arquivo. Depois eu chamei do jeito certo, gcc (...) arquivo.c -o arquivo, e deu certo.

Também recebi umas mensagens do tipo dessas últimas - acho que aparecem quando se chama a função antes de tê-la declarado. Resolvi declarando protótipos da função, isto é, algo do tipo

void funcao (int a);

int main () {
int num;
funcao (num);
}

void funcao (int a) {
printf ("%d", a);
}

para que a função main saiba que a função funcao existe, ainda que não tenha sido declarada antes. Como disse, não sei se é o caso, mas espero que ajude!