静态库之间的相互依赖

Inter-dependencies between static libraries

我正在尝试 link 两个库 libA.a 和 libB.a 以及一个 main.c 文件。 libB 依赖于 libA,main 依赖于两者。

我能够独立编译这些库,但是当我尝试 link 它们一起创建最终的可执行文件时,我得到一个错误,即 B 对 A 的函数的引用未定义。

有没有办法告诉 linker 在 libA 中搜索这些函数?

  1. 我将 运行 在 Cortex-M3 MCU 上的 FreeRTOS 上编写此代码,因此静态 linking 是我唯一的选择。
  2. 我真的希望能够在不更改 libB 的编译过程的情况下做到这一点。

这里有一个类似的问题 link 但正如我所说,动态 linking 不是一个选项。

应Ofek的要求一个玩具代码 (忽略功能和语法错误,如果有的话)-

libA

int libA_fun1()
{ return stuff; }

int libA_fun2()
{ return something_else; }

libB

#include <libA.h>

int libB_fun1()
{
    //do stuff
    int x = libA_fun1();
    return something;
}

main.c

#include <libA.h>
#include <libB.h>

int main()
{
    printf("%d", libA_fun2() * libB_fun1()); 
    return 0;
}

我构建了 libA.a 和 libB.a。终于

gcc main.c -lA -lB -LPathA -LPathB

给出错误:在 libB_filexx.c 行 xx

中未定义对 libA_fun1 的引用

但是,函数在 libA.h

中正确定义

感谢@Ike 提出的有效修复建议。

简而言之:

If any [static] library B depends on symbols defined in library A, then library B should appear first in the list supplied to the linker. A more detailed explaination can be found here.

库在链接器中的显示顺序也很重要,这就是我的链接命令失败的地方。