我正在尝试将两个库libA.a和libB.a与main.c文件链接起来。 libB依赖于libA,而main依赖于libA。
我能够独立编译库,但是当我尝试将它们链接在一起以创建最终的可执行文件时,我得到的错误是没有定义引用A的函数。
有没有办法告诉链接器在libA中搜索这些函数?
在link有一个类似的问题,但正如我所说,动态链接不是一种选择。
根据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;
}
的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中正确定义
答案 0 :(得分:1)
感谢@Ike建议修复工作。
如果任何[静态] 库B 依赖于库A 中定义的符号,那么库B 应该出现第一提供给链接器的列表中的strong>。 可以找到更详细的解释here。
librries对链接器的显示顺序也很重要,这就是我的链接命令失败的地方。