0

我正在尝试编写非常基本的 x86 代码并在 C 程序中调用它。我正在运行 OSX 10.8.2。这是我的代码:

开始.c:

#include <stdio.h>

void _main();  // inform the compiler that Main is an external function

int main(int argc, char **argv) {
    _main();
    return 0;
}

代码.s

.text

.globl _main
_main:
    ret

我运行以下命令来尝试编译:

gcc -c -o code.o code.s
gcc -c -o start.o start.c
gcc -o start start.o code.o

然后在最终命令之后返回此输出:

Undefined symbols for architecture x86_64:
  "__main", referenced from:
      _main in start.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我在编译器调用中遗​​漏了什么吗?我需要更新一些东西/安装一些不同的东西吗?我只是无法在任何地方找到明确的答案,因为这是一个如此普遍的输出。谢谢!

4

1 回答 1

4

您的 asm_main符号中需要一个额外的下划线:

.text

.globl __main
__main:
    ret

C 符号在编译时会得到一个下划线前缀,因此您的 Cmain实际上是并且实际上需要定义_main一个 extern C ,就好像您在 asm 中编写它一样。_main__main

于 2012-12-04T22:13:43.593 回答