【发布时间】:2015-05-28 21:06:52
【问题描述】:
我正在尝试链接两个库 libA.a 和 libB.a 以及一个 main.c 文件。 libB 依赖于 libA,main 依赖于两者。
我能够独立编译这些库,但是当我尝试将它们链接在一起以创建最终的可执行文件时,我收到错误,即 B 对 A 的函数的引用未定义。
有没有办法告诉链接器在 libA 中搜索这些函数?
- 我将在 Cortex-M3 MCU 上的 FreeRTOS 上运行此代码,因此静态链接是我唯一的选择。
- 我真的希望能够在不更改 libB 的编译过程的情况下做到这一点。
link 也有类似的问题,但正如我所说,动态链接不是一种选择。
应 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 中的 libA_fun1 的引用,第 xx 行
但是,该函数在 libA.h 中正确定义
【问题讨论】:
-
完全支持此方案。你能发布确切的错误信息吗?更好 - 一个演示链接错误的玩具代码?
-
@OfekShilon - 我已经更新了一个例子
-
你在做什么,一般来说,应该很好(假设没有循环依赖),所以我会寻找其他方式构建设置。这是一个愚蠢的猜测,但由于链接器顺序,我很久以前就被咬过。尝试颠倒链接
main与A和B的顺序。例如:gcc main.c -lB -lA -LPathB -LPathA -
你猜怎么着!那行得通!怎么样?!!
标签: eclipse gcc linker dependencies static-libraries