Impossible de lier le fichier d'assemblage sous Mac OS X à l'aide de ld

Je suis en train de lancer un assemblage de base de fichier à l'aide de 64 Bits Mac OS X Lion, à l'aide de msna et ld qui sont installés par défaut avec Xcode.

J'ai écrit un fichier d'assemblage, qui imprime un caractère, et je l'ai eu à construire à l'aide de msna.

nasm -f elf -o program.o main.asm

Cependant, lorsque je vais pour faire le lien avec ld, il échoue avec un certain nombre d'erreurs/avertissements:

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

Donc, j'ai essayé de rectifier quelques-unes de ces questions, et a obtenu nulle part.

Voici l'une des choses que j'ai essayé:

ld -arch i386 -e _start -o program program.o

Qui me semblait, mais j'avais tort.

La façon dont vous faites l'objet de fichier compatible avec l'architecture de msna et ld seront d'accord avec?

Également, comment pouvez-vous définir le point d'entrée dans le programme (en ce moment je suis en utilisant global _start dans .section textqui est au-dessus de _startqui ne semble pas faire beaucoup de bien.)

Je suis un peu confus quant à la façon dont vous le feriez avec succès lier un objet de fichier pour un fichier binaire à l'aide de ld, et je pense que je manque juste un peu de code (ou de l'argumentation de msna ou ld) qui fera d'eux d'accord.

Toute aide appréciée.

source d'informationauteur Jack Greenhill