Estoy tratando de ejecutar un archivo de ensamblaje básico utilizando 64 Bit Mac OS X Lion, usando nasm y ld que están instalados por defecto con Xcode.No se puede vincular el archivo de ensamblaje en Mac OS X usando ld
He escrito un archivo de ensamblaje, que imprime un personaje, y lo tengo para construir usando nasm.
nasm -f elf -o program.o main.asm
Sin embargo, cuando voy a vincularlo con dificultades de aprendizaje, se produce un error con un buen número de errores/advertencias:
ld -o program program.o
ld: warning: -arch not specified
ld: warning: -macosx_version_min not specificed, assuming 10.7
ld: warning: ignoring file program.o, file was built for unsupported file format which is not the architecture being linked (x86_64)
ld: warning: symbol dyld_stub_binder not found, normally in libSystem.dylib
ld: entry point (start) undefined. Usually in crt1.o for inferred architecture x86_64
tanto, he intentado rectificar algunos de estos problemas, y no llegó a ninguna parte.
He aquí una de las cosas que he intentado:
ld -arch i386 -e _start -o program program.o
que pensé que trabajar, pero estaba equivocado.
¿Cómo se hace que el archivo objeto sea una arquitectura compatible con la que nasm y ld estarán de acuerdo?
Además, ¿cómo definiría el punto de entrada en el programa (en este momento estoy usando global _start
en .section text
, que está por encima _start
, lo que no parece hacer mucho bien.)
Soy una Estaba un poco confundido en cuanto a cómo vincularía con éxito un archivo objeto a un archivo binario usando ld, y creo que me falta un código (o argumento para nasm o ld) que los hará estar de acuerdo.
Cualquier ayuda apreciada.
¿Ha intentado vincular con gcc en lugar de LD? A menudo es mucho más fácil y puede usar el tiempo de ejecución de C y la biblioteca estándar (por ejemplo, 'main' como punto de entrada). Otra cosa que debes probar es usar un formato de archivo de objeto 'mach' en lugar de' elf'. – user786653