Не удается связать файл сборки в Mac OS X с помощью ld


Я пытаюсь запустить базовый файл сборки, используя 64-битную Mac OS X Lion, используя nasm и ld, которые установлены по умолчанию с Xcode.

Я написал файл сборки, который печатает символ, и я получил его для сборки с помощью nasm.

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

Однако, когда я перейдите, чтобы связать его с ld, он не работает с несколькими ошибками / предупреждениями:

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

Итак, я попытался исправить некоторые из этих проблем, но ничего не добился.

Вот. одна из вещей, которые я пробовал:

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

Я думал, что это сработает, но я ошибался.

Как сделать объектный файл совместимым архитектура, с которой согласятся nasm и ld?

Также, как бы вы определяли точку входа в программу (сейчас я использую global _start в .section text , который находится выше _start ], который, похоже, не приносит особой пользы.)

Я немного сбит с толку, как можно успешно связать объектный файл с двоичным файлом с помощью ld, и я думаю, что мне просто не хватает кода ( или аргумент в пользу nasm или ld), который заставит их согласиться.

Любая помощь приветствуется.

11
задан Jack Greenhill 5 August 2011 в 14:08
поделиться