是的,我知道之前有很多人问过这个问题,但我仍然无法理解我的问题
我有 2 个库,比如说 liba 和 libb。 libb 使用 liba 但在 .a 中编译,因此它应该在编译时链接。 我有以下 GCC 命令:
gcc -o my_program obj/mymain.o obj/myutils.o liba/liba.a libb/libb.a -Iinclude -Iliba -Ilibb
但是 GCC 返回了很多从 libb 函数到 liba 函数的“未定义的对...的引用”。
发生了什么事?我该怎么办?
谢谢
最佳答案
对link
编译命令的命令求值非常重要。
当编译器看到 .o 文件时,它们会自动添加到目标二进制文件中,因此所有 .o 文件都存在。这会留下需要找到的未定义实体列表。
下一阶段是浏览库。搜索每个库,并将满足 undefined reference 的每个库的 .o 元素添加到目标二进制文件中。这总能解决一些问题。但是,它可能还有进一步的要求。所以添加一个库的一部分可能会添加到需要满足的元素。
当一个库需要另一个库时,需要在需要它的东西之后,满足它要求的库之前指定它。
如果 .o 文件也需要库的相同部分,则当从 .o 中删除代码(删除拉入库部分的机制)时,可能会出现此问题。
关于c - 未定义对另一个库函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42642542/