【问题标题】:Undefined reference to function of another lib对另一个库的函数的未定义引用
【发布时间】:2017-03-07 07:26:01
【问题描述】:

是的,我知道很多人以前问过这个问题,但我仍然无法理解我的问题

我有 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 函数的“未定义的引用 ...”。

发生了什么?我该怎么办?

谢谢

【问题讨论】:

  • 您能否显示将一个库包含到另一个库的代码?以及整个错误信息?
  • 订单很重要。如果库 B 依赖于库 A,则 B 需要在命令行上 A 之前。
  • 关于-I,因为我在这些目录中有标题,所以我想这没关系。事实上,正如@Someprogrammerdude 指出的那样,这是一个复杂的问题......谢谢您的帮助

标签: c gcc linker


【解决方案1】:

link 编译命令的命令评估非常重要。

当编译器看到 .o 文件时,它们会自动添加到目标二进制文件中,因此所有 .o 文件都存在。这会留下一个需要找到的未定义实体列表。

下一阶段是浏览库。搜索每个库,并将满足未定义引用的每个库的 .o 元素添加到目标二进制文件中。这总能解决一些问题。但是,它也可能有进一步的要求。因此,添加库的一部分可能会增加需要满足​​的元素。

当一个库需要另一个库时,需要在需要它的东西之后和满足其要求的库之前指定它。

如果 .o 文件也需要库的相同部分,则可能会在从 .o 中删除代码时出现此问题(删除拉入库部分的机制)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多