静态库之间的相互依赖
Inter-dependencies between static libraries
我正在尝试 link 两个库 libA.a 和 libB.a 以及一个 main.c 文件。 libB 依赖于 libA,main 依赖于两者。
我能够独立编译这些库,但是当我尝试 link 它们一起创建最终的可执行文件时,我得到一个错误,即 B 对 A 的函数的引用未定义。
有没有办法告诉 linker 在 libA 中搜索这些函数?
- 我将 运行 在 Cortex-M3 MCU 上的 FreeRTOS 上编写此代码,因此静态 linking 是我唯一的选择。
- 我真的希望能够在不更改 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.
库在链接器中的显示顺序也很重要,这就是我的链接命令失败的地方。
我正在尝试 link 两个库 libA.a 和 libB.a 以及一个 main.c 文件。 libB 依赖于 libA,main 依赖于两者。
我能够独立编译这些库,但是当我尝试 link 它们一起创建最终的可执行文件时,我得到一个错误,即 B 对 A 的函数的引用未定义。
有没有办法告诉 linker 在 libA 中搜索这些函数?
- 我将 运行 在 Cortex-M3 MCU 上的 FreeRTOS 上编写此代码,因此静态 linking 是我唯一的选择。
- 我真的希望能够在不更改 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.
库在链接器中的显示顺序也很重要,这就是我的链接命令失败的地方。