Eclipse 静态库之间的相互依赖关系
我正在尝试链接两个库libA.a和libB.a以及一个主.c文件。libB依赖于libA,main依赖于两者 我能够独立地编译这些库,但是当我试图将它们链接在一起以创建最终的可执行文件时,我得到了一个错误,即没有定义B对A的函数的引用 有没有办法告诉链接器在libA中搜索这些函数Eclipse 静态库之间的相互依赖关系,eclipse,gcc,linker,dependencies,static-libraries,Eclipse,Gcc,Linker,Dependencies,Static Libraries,我正在尝试链接两个库libA.a和libB.a以及一个主.c文件。libB依赖于libA,main依赖于两者 我能够独立地编译这些库,但是当我试图将它们链接在一起以创建最终的可执行文件时,我得到了一个错误,即没有定义B对A的函数的引用 有没有办法告诉链接器在libA中搜索这些函数 我将在Cortex-M3 MCU上的FreeRTOS上运行此代码,因此静态链接是我唯一的选择 我真的希望能够做到这一点而不改变libB的编译过程 在这方面也有类似的问题,但正如我所说,动态链接不是一个选项 按照Ofek
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;
}
给出错误:未定义对libB_filexx.c中libA_fun1的引用,第xx行
但是,由于@Ike建议了一个有效的修复方法,libA.h中正确定义了该函数 简言之: 如果任何[静态]库B依赖于库A中定义的符号,则库B应首先出现在提供给链接器的列表中。 可以找到更详细的解释
libries在链接器中出现的顺序也很重要,这也是我的链接命令失败的原因。完全支持此方案。你能发布准确的错误消息吗?更好的是——一个演示链接错误的玩具代码?@OfekShilon——我已经用一个示例更新了您正在做的事情,一般来说,应该是非常好的(前提是没有循环依赖关系),所以我希望构建其他设置。这是一个愚蠢的猜测,但由于链接器的顺序,我在很久以前就被咬过。尝试颠倒链接
main
与A
和B
的顺序。示例:gcc main.c-lB-lA-LPathB-LPathA
Hey猜猜看!成功了!!怎样?!!
#include <libA.h>
#include <libB.h>
int main()
{
printf("%d", libA_fun2() * libB_fun1());
return 0;
}
gcc main.c -lA -lB -LPathA -LPathB