我正在尝试编写非常基本的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
我在编译器调用中遗漏了什么?我是否需要更新/安装不同的东西?我无法在任何地方找到明确的答案,因为这是一般的输出。谢谢!
答案 0 :(得分:4)
您的asm _main
符号需要额外的下划线:
.text
.globl __main
__main:
ret
C符号在编译时会得到下划线前缀,因此如果你写的话,你的C main
实际上是_main
,而外部C _main
实际上需要被定义为__main
它在asm。