Was ist das von GCC in OSX verwendete Dateiformat?
-
19-09-2019 - |
Frage
Ich versuche die Baugruppe mit Nasm, dem PCASM -book.pdf von Dr. Paul Carter -zu lernen - http://www.drpaulcarter.com/pcasm/ - Auf meinem Mac OS X Snow Leopard.
Ich versuche, die vorherige kompilierte C -Probe mit ASM -Proben zu verknüpfen:
gcc first.o driver.c asm_io.o -o first
Aber es gibt es zurück:
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
Ich verwende das Mach-O-Format, um ASM-Samples zu kompilieren, und ich habe keine Fehler:
nasm -f macho **first.asm**
nasm -f macho asm_io.asm
Wenn ich versuche, nur GCC -c in Treiber.c zu verwenden, verwendete LD, um alle Objektdateien zu verknüpfen, LD scheint nicht zu verknüpfen.
ld -o first asm_io.o first.o driver.o
Es kehrt zurück:
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
Was ist das Problem? Was ist das richtige Format, um mit GCC und Nasm unter OS X zu arbeiten?
Vielen Dank. Daniel Koch
Lösung
Die "Datei ist nicht von der erforderlichen Architektur" zeigt an, dass Sie versuchen, Objektdateien mit unterschiedlichen Architekturen zu verknüpfen: wahrscheinlich x86_64 und i386. Versuchen Sie, wie Ihr NASM -Ausgang i386 erscheint, verwenden -arch i386
mit GCC. Sie können auch verwenden file
Anzeige der Architektur einer bestimmten Objektdatei oder Bibliothek.
% touch foo.c ; gcc -c foo.c
% file foo.o
foo.o: Mach-O 64-bit object x86_64
% gcc -c -arch i386 foo.c
% file foo.o
foo.o: Mach-O object i386