我试图将程序集主文件链接到外部函数,但是我一直在获取“对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文件中引用的所有功能。 我希望将所有文件编译成可执行文件。
答案 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"