【问题标题】:GCC run assembly program mac?GCC运行汇编程序mac?
【发布时间】:2013-02-13 06:41:00
【问题描述】:

我正在尝试在我的 Mac 上的终端中运行以下代码:

.section, .data

format_string:
   .asciz "My favorite number is %d!"

number:
  .long 786

.section, .text
.globl main

main:
  pushl number
 pushl $format_string  
 call printf 
  addl $8, %esp

  pushl $0
  call exit

此代码位于名为 favorite.s 的文件中

我使用命令“gcc favorite.s -m32”并看到以下消息:

Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
  "exit", referenced from:
      main in ccUKdD8O.o
  "printf", referenced from:
      main in ccUKdD8O.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

我在这里做错了什么?谢谢。

【问题讨论】:

    标签: macos gcc assembly terminal


    【解决方案1】:

    在 Mac OS X 上,符号前带有下划线。在您的程序中,在 mainexitprintf 前面添加 _,然后重试!

    【讨论】:

    • 添加后我现在得到一个输出,上面写着“非法指令:4”:/
    • 听起来像是某个地方的错字。你能展示你更新的代码吗?
    • 我尝试了一个更简单的程序,它产生了同样的信息: .section, .text .globl _main _main: # 传递一个参数退出。 pushl $27 call _exit
    • 等待 - 在编译时或运行时?你遇到这个问题了吗:stackoverflow.com/questions/10177038/…
    • 它编译。当我执行 ./a.out 时会出现该消息。我尝试在执行 gcc favorite.s -m32 时添加 -mmacosx-version-min=10.6,但它没有改变任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多