Я пытаюсь запустить базовый файл сборки, используя 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), который заставит их согласиться.
Любая помощь приветствуется.