链接多个程序集文件

时间:2019-06-29 18:04:33

标签: linux assembly

我试图将程序集主文件链接到外部函数,但是我一直在获取“对main中函数X的未定义引用”。

我有一个充满外部文件的文件夹,这些外部文件都是正确的名称,并且都是.s文件。

我确实知道其他人也有这个问题,但是它们似乎主要集中在C和汇编文件上,但这仅是链接汇编文件。

这是编译时的代码:

gcc -o main.o main.s -I lib/ -no-pie

尝试编译时发生的错误:

/tmp/ccMgNx1L.o: In function `main':
(.text+0xa): undefined reference to `funcA'
(.text+0xf): undefined reference to `funcB'
(.text+0x14): undefined reference to `funcC'

一些额外的清晰度: lib文件夹包含main.s文件中引用的所有功能。 我希望将所有文件编译成可执行文件。

1 个答案:

答案 0 :(得分:3)

我认为您希望gcc -no-pie -o main main.s lib/*.s汇编所有源文件并将它们链接到一个可执行文件中。


请注意输出文件上缺少.o,因为您正在组装+链接到可执行文件,而不仅仅是链接到未链接的.o对象文件。

-I设置#include <>#include ""的包含路径。这里完全无关紧要。 -L lib/也会这样,因为您没有告诉gcc链接任何库。如果您 did 链接了任何库,则仅在哪里查找任何库。 (但是您没有.a.so库,您尚未汇编的asm源文件。)

如果您有main.S(大写S),gcc将首先通过C预处理程序运行它,因此您可以#include "foo.s"主要使用您实际使用的所有功能。并且-I设置包含路径将避免需要#include "lib/foo.s"