What file format is used by gcc in OSX?

I am trying to learn the build using NASM, pcasm-book.pdf from Dr. Paul Carter - http://www.drpaulcarter.com/pcasm/ - on my Mac OS X Snow Leopard.

I am trying to link the previous compiled C pattern with asm patterns:

gcc first.o driver.c asm_io.o -o first 

But he returns it:

 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 

I use the Mach-o format to compile asm samples, and I had no errors:

 nasm -f macho **first.asm** nasm -f macho asm_io.asm 

If I try to use only gcc -c in the driver.c file, using ld to link all the object files, ld does not refer to format.o format.

 ld -o first asm_io.o first.o driver.o 

It returns:

 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 

What is the problem? What is the correct format for working with gcc and NASM in OS X?

Thanks. Daniel Koch

+4
source share
1 answer

โ€œThe file does not have the required architectureโ€ means that you are trying to link object files with different architectures: perhaps x86_64 and i386. It seems your output is nasm i386, try using -arch i386 with gcc. You can also use file to display the architecture of a given object file or library.

 % 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 
+5
source

All Articles