使用gcc编译基本x86代码时链接错误

时间:2012-12-04 22:10:50

标签: c gcc compiler-errors x86

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

start.c:

#include <stdio.h>

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

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

code.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

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

1 个答案:

答案 0 :(得分:4)

您的asm _main符号需要额外的下划线:

.text

.globl __main
__main:
    ret

C符号在编译时会得到下划线前缀,因此如果你写的话,你的C main实际上是_main,而外部C _main实际上需要被定义为__main它在asm。