静态库之间的相互依赖

时间:2015-05-28 21:06:53

标签: eclipse gcc linker dependencies static-libraries

我正在尝试将两个库libA.a和libB.a与main.c文件链接起来。 libB依赖于libA,而main依赖于libA。

我能够独立编译库,但是当我尝试将它们链接在一起以创建最终的可执行文件时,我得到的错误是没有定义引用A的函数。

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

  1. 我将在Cortex-M3 MCU上的FreeRTOS上运行此代码,因此静态链接是我唯一的选择。
  2. 我真的希望能够在不改变libB的编译过程的情况下做到这一点。
  3. 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中正确定义

1 个答案:

答案 0 :(得分:1)

感谢@Ike建议修复工作。

简而言之:

  

如果任何[静态] 库B 依赖于库A 中定义的符号,那么库B 应该出现第一。   可以找到更详细的解释here

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