Я пытаюсь изучить сборку, используя NASM, pcasm-book.pdf от Доктора Пола Картера - http://www.drpaulcarter.com/pcasm/ - на моем Mac OS X Snow Leopard.Какой формат файла используется gcc в OSX?
Я пытаюсь связать предыдущий скомпилированный образец C образцы ассемблера:
gcc first.o driver.c asm_io.o -o first
Но это возвращение его:
driver.c:3: warning: ‘cdecl’ attribute ignored
ld: warning: in first.o, **file is not of required architecture**
ld: warning: in asm_io.o, file is not of required architecture
Undefined symbols:
"_asm_main", referenced from:
_main in ccjLqYJn.o
ld: symbol(s) not found
Я использую формат macho-компилировать ассемблер не образцы, и я получил никаких ошибок:
nasm -f macho **first.asm**
nasm -f macho asm_io.asm
Если я пытаюсь использовать только GCC -c в driver.c, используя ЛД, чтобы связать все объектные файлы, л d не ссылается на формат driver.o.
ld -o first asm_io.o first.o driver.o
возвращает:
ld: warning: in driver.o, file is not of required architecture
Undefined symbols:
"_putchar", referenced from:
print_char in asm_io.o
print_nl in asm_io.o
"_printf", referenced from:
print_int in asm_io.o
print_string in asm_io.o
push_of in asm_io.o
sub_dump_stack in asm_io.o
stack_line_loop in asm_io.o
sub_dump_mem in asm_io.o
mem_outer_loop in asm_io.o
mem_hex_loop in asm_io.o
sub_dump_math in asm_io.o
tag_loop in asm_io.o
print_real in asm_io.o
invalid_st in asm_io.o
"_scanf", referenced from:
read_int in asm_io.o
"_getchar", referenced from:
read_char in asm_io.o
ld: symbol(s) not found for inferred architecture i386
В чем проблема? Каков правильный формат работы с gcc и NASM в OS X?
спасибо. Daniel Koch
спасибо. Gcc использует x86_64 по умолчанию, а формат «macho» из NASM - i386. –
@ DanielKoch вы могли бы разместить то, что наконец-то сработало для вас? Я все еще получаю ошибки компиляции. – gideon
@gideon Возможно, вам стоит опубликовать новый вопрос или включить ссылку на команды, которые вы пытаетесь и какие ошибки вы видите. Или описать то, что вы не понимали в моем ответе, поэтому я могу улучшить его. –