Tengo un archivo de ensamblaje de ejemplo que compilo con nasm:Asamblea/problema Vinculación con nasm y LD
nasm -f elf syscall.asm
Esto genera un archivo syscall.o. Trato de vincularlo con ld:
ld -o syscall syscall.o
El comando ld falla con el siguiente error:
ld: i386 architecture of input file `syscall.o' is incompatible with i386:x86-64 output
Sin embargo, si lo hago
ld -o syscall syscall.o -melf_i386
el comando tiene éxito y me da una syscall ejecutable.
Al calcular que nasm no está generando código de objeto en formato x86-64, agregué la directiva "BITS 64" al comienzo del archivo syscall.asm.
Luego de intentar montar syscall.asm con nasm dio el siguiente error:
error: elf output format does not support 64-bit code
Eso parece extraño porque hacerlo "archivo/usr/bin/nasm" en mi terminal da:
/usr/bin/nasm: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Mi Fedora Core 11 de 64 bits tiene instalada la última versión de Nasm y mi CPU es Intel Core 2 Duo E7200.
[EDIT]
Mi pregunta es ¿cómo consigo nasm para emitir ficheros objeto que sea compatible con i386: x86-64.
Entonces, ¿cuál es la pregunta? – wallyk