4

Mac OS X Snow Leopard で、ポール カーター博士の pcasm-book.pdf ( http://www.drpaulcarter.com/pcasm/ ) である NASM を使用してアセンブリを学習しようとしています。

以前にコンパイルした C サンプルを asm サンプルにリンクしようとしています。

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

Mach-o 形式を使用して asm サンプルをコンパイルしていますが、エラーは発生しませんでした。

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

driver.c で gcc -c のみを使用し、ld を使用してすべてのオブジェクト ファイルをリンクしようとすると、ld は 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

どうしたの?OS X で gcc と NASM を使用するための正しい形式は何ですか?

ありがとうございました。ダニエル・コッホ

4

1 に答える 1

6

「ファイルは必要なアーキテクチャではありません」は、オブジェクト ファイルを異なるアーキテクチャ (おそらく x86_64 と i386) にリンクしようとしていることを示しています。nasm の出力が i386 のように見えるので-arch i386、gcc で使用してみてください。fileを使用して、特定のオブジェクト ファイルまたはライブラリのアーキテクチャを表示することもできます。

% 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
于 2009-12-16T03:32:27.530 に答える