gpt4 book ai didi

无法在 macOS Sierra 上将程序集文件 (.s) 与 GCC 链接

转载 作者:行者123 更新时间:2023-12-02 09:12:22 26 4
gpt4 key购买 nike

我有 2 个文件要编译。第一个是 main.c,第二个是在汇编 (work.s) 中执行求和和乘法的函数。

这是代码:

ma​​in.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

这是输出:

Undefined symbols for architecture i386:

"_work", referenced from: _main in main-fbbcca.o

ld: symbol(s) not found for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)

虽然在 Linux 上使用相同的文件和命令它可以工作,为什么以及如何修复它?

最佳答案

也许将您的全局更改为 gcc 正在寻找的名称?

.globl _work;

_work :
...

还有其他方法:

https://montcs.bloomu.edu/~bobmon/Code/Asm.and.C/C-asm/Asm-C-example0.shtml

<= 不同的编译器,相同的原理...

关于无法在 macOS Sierra 上将程序集文件 (.s) 与 GCC 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com