如何使用ld链接macOS上的某些目标文件?

时间:2018-05-11 13:59:15

标签: c macos assembly compiler-errors linker

现在,我正在学习如何编写汇编语言。所以,我写了一个名为test_func.S的汇编文件和一个C源文件main.c.我编译了这些文件,对于test_func.S,我使用“as”编译“test_func.S” 对于test_func.S,我只定义一个空函数。以下是我在test_func.S。

中的代码
.globl test_func
test_func:
    movl $99, %eax
    ret

我的main.c也很容易。只需调用我在test_func.S中定义的函数。以下是我的代码。

extern int test_func();
int main() {
    return test_func();
}

首先,我使用作为来编译我的test_func.S。以下是我在终端上的命令。

as -arch i386 test_func.S -o test_func.o

接下来,我使用 clang 编译“main.c”。

clang -m32 -c main.c -o main.o

为了生成可执行文件,最后一步是将这些目标文件链接到可执行文件中。我使用以下命令。

clang -m32 test_func.o main.o -o main

但是, ld 会产生错误:

"Undefined symbols for architecture i386: "_test_func", referenced from: _main in main.o ld: symbol(s) not found for architecture i386"

我在另一台运行ubuntu系统的计算机上使用相同的命令和相同的源文件,一切都是操作系统。 当我echo $?时,结果是99.那么,我在macOS上的步骤出错了什么?

0 个答案:

没有答案