【问题标题】:What's the file format used by gcc in OSX?OSX 中 gcc 使用的文件格式是什么?
【发布时间】:2010-12-27 02:13:15
【问题描述】:

我正在尝试在我的 Mac OS X Snow Leopard 上使用 NASM(Paul Carter 博士的 pcasm-book.pdf - http://www.drpaulcarter.com/pcasm/)来学习组装。

我正在尝试将之前编译的 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 的正确格式是什么?

谢谢。 丹尼尔·科赫

【问题讨论】:

    标签: macos gcc assembly osx-snow-leopard nasm


    【解决方案1】:

    “文件不是必需的体系结构”表示您正在尝试将目标文件与不同的体系结构链接:可能是 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
    

    【讨论】:

    • 谢谢。 Gcc 默认使用 x86_64,而 NASM 的“macho”格式是 i386。
    • @DanielKoch 你能发布最终对你有用的东西吗?我仍然得到编译错误。
    • @gideon 您可能应该发布一个新问题或包含指向您正在尝试的命令和您看到的错误的链接。或者描述一下您对我的回复的不理解之处,以便我改进。
    • 好提醒@NicholasRiley。我整天都在做(实际上是在尝试构建一个交叉编译器集合_并从保罗卡特博士的书中编译程序。不幸的是,由于他使用 c 运行时库,出现了次要问题,并且需要有一个 x86 版本的它。所以以下评论中的所有步骤都对我有用:
    • (1) nasm -f elf32 first.asm (2) gcc -m32 -lc -o first first.o driver.c asm_io.o 这是安装后sudo yum install glibc-devel.i686 libstdc++-devel.i686
    猜你喜欢
    • 2018-09-14
    • 2011-12-29
    • 2019-01-22
    • 2013-07-14
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2014-01-20
    • 2012-01-08
    相关资源
    最近更新 更多