我有 2 个文件要编译。
第一个是 main.c,第二个是在汇编 (work.s) 中执行求和和乘法的函数。
这是代码:
main.c 文件:
#include <stdio.h>
short work();
int main() {
short z = work();
printf("work(); -> %hd\n", z);
return 0;
}
work.s 文件:
.globl work;
work :
xorl %eax,%eax;
xorl %ecx,%ecx;
movw $20,%ax;
subw $2,%ax;
movw $7,%cx;
addw $3,%cx;
movw $10,%cx;
subw $3,%cx;
shl $1,%cx;
addw %cx,%ax;
ret;
使用 gcc 从命令行:gcc -m32 main.c work.s -o main
这是输出:
i386 架构的未定义符号:
“_work”,引用自:
_main 在 main-fbbcca.o 中
ld:未找到架构 i386 的符号
clang: 错误: 链接器命令失败,退出代码 1(使用 -v 查看
调用)
虽然在 Linux 上使用相同的文件和命令它可以工作,为什么以及如何修复它?