Problema ao gerar executavel

Problema ao gerar executavel

por Tiago Nicolosi -
Número de respostas: 4
Olá a todos!

Estou tendo problemas durante a fase de ligação do exercicio programa. Segue o meu procedimento:

foo:/$ nasm -f elf acha_primo.asm
foo:/$ gcc -c ep.c
foo:/$ld -m elf_i386 -static /usr/lib/crt1.o /usr/lib/crti.o ep.o acha_primo.o -lc /usr/lib/crtn.o -o prog

e aparece a seguinte mensagem de erro:

/usr/bin/../lib/libc.a(ioputs.o): In function `puts':
(.text+0x16d): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(ioputs.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(syslog.o): In function `closelog':
(.text+0xcd): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(syslog.o): In function `openlog':
(.text+0x2d2): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(syslog.o): In function `__vsyslog_chk':
(.text+0x7f8): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(syslog.o): In function `__vsyslog_chk':
(.text+0x80a): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(syslog.o)triste.eh_frame+0x166): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(backtrace.o): In function `backtrace':
(.text+0x55): undefined reference to `_Unwind_Backtrace'
/usr/bin/../lib/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0xff): undefined reference to `_Unwind_GetIP'
/usr/bin/../lib/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0x124): undefined reference to `_Unwind_GetGR'
/usr/bin/../lib/libc.a(backtrace.o): In function `backtrace_helper':
(.text+0x12f): undefined reference to `_Unwind_GetCFA'
/usr/bin/../lib/libc.a(vfprintf_chk.o): In function `__vfprintf_chk':
(.text+0x106): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(vfprintf_chk.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(iofclose.o): In function `fclose':
(.text+0x1a7): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(iofclose.o)triste.eh_frame+0x166): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(iofflush.o): In function `fflush':
(.text+0xec): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(iofflush.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(ioftell.o): In function `ftell':
(.text+0x19c): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(ioftell.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(iofwrite.o): In function `fwrite':
(.text+0x134): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(iofwrite.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(ioseekoff.o): In function `_IO_seekoff':
(.text+0x1ec): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(ioseekoff.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(wfileops.o): In function `_IO_wfile_underflow':
(.text+0xc87): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(wfileops.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(fileops.o): In function `_IO_file_underflow':
(.text+0x10fa): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(fileops.o): In function `_IO_file_fopen':
(.text+0x216a): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(fileops.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(iogetdelim.o): In function `getdelim':
(.text+0x269): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(iogetdelim.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(fseek.o): In function `fseek':
(.text+0xf2): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(fseek.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'
/usr/bin/../lib/libc.a(ftello.o): In function `ftello':
(.text+0x19c): undefined reference to `_Unwind_Resume'
/usr/bin/../lib/libc.a(ftello.o)triste.eh_frame+0xde): undefined reference to `__gcc_personality_v0'

eu procurei um pouco na internet e me pareceu que o problema é uma incompatibilidade do gcc com uma versao mais nova da libc, mas não entendi muito bem. Alguem esta tendo problemas durante a ligação do programa? Alguma idéia de como resolver esse problema?

ah, tentei fazer o mesmo na rede linux, e tive o mesmo problema, com uma mensagem um pouco menor.

Qualquer sugestão é bem vinda!

Obrigado

Em resposta à Tiago Nicolosi

Re: Problema ao gerar executavel

por Marcelo Reis -
Tente o seguinte procedimento:

foo:/$ nasm -f elf acha_primo.asm -o func.o
foo:/$ gcc -ansi -pedantic -Wall -c -o main.o ep.c
foo:/$ gcc -ansi -pedantic -Wall -g -o teste.bin main.o func.o

Ou seja, ligue os dois objetos (da função em asm e da parte em C) utilizando o próprio gcc.

[]s,
Em resposta à Marcelo Reis

Re: Problema ao gerar executavel

por Thiago Costa -
eu tentei fazer isso com meu programa e apareceu o seguinte:

$ gcc -ansi -pedantic -Wall -g -o teste teste.o filtra_os_primos.o
/usr/bin/ld: i386 architecture of input file `filtra_os_primos.o' is incompatible with i386:x86-64 output
Em resposta à Thiago Costa

Re: Problema ao gerar executavel

por Rafael Parente -
Eu já tive esse problema ... não sei se é o mesmo, mas na época eu não havia colocado algo do tipo :
"global nome_da_funcao"

no caso do EP, ficaria :
"
section .text

global filtra_os_primos

filtra_os_primos :
<código, código e código>
"

Espero que isso ajude sorriso