【发布时间】:2018-11-18 16:34:50
【问题描述】:
我有 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 in main-fbbcca.o
ld:未找到体系结构 i386 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看 调用)
在具有相同文件和命令的 Linux 上,它可以工作,为什么以及如何修复它?
【问题讨论】: