将静态库与另一个静态库链接,并在exe中使用主库

Linking of static lib with another static lib and use the master lib in a exe

本文关键字:静态 主库 exe 另一个 链接 并在      更新时间:2023-10-16

在eclipse中,我使用MinGW编译器在windows平台中完成了以下操作-C_proj.exe--->链接---->libB_proj.a---->链接---->libA_proj.a

  1. 当链接A和B时,我只指定libA_proj.A的路径(而不是库名称,因为这似乎不可能!)

  2. 当在C中使用B时,我必须同时指定libA_proj.a和libB_proj.a。

代码-

//a.h
    class a
    {
    public:
        void printA();
    };
//a.cpp    
    void a::printA()
    {
        std::cout<<"This is 'a'"<<std::endl;
    }
//b.h
    class b
    {
    public:
        void printB();
        void printA();
    };
//b.cpp
    void b::printB()
    {
        std::cout<<"This is 'B'"<<std::endl;
    }
    void b::printA()
    {
        std::cout<<"This is 'B'....calling A"<<std::endl;
        a objA;
        objA.printA();
    }
//c.cpp    
    int main()
    {
        b objB;
        objB.printB();
        objB.printA();
        return 0;
    }

现在我的要求是--我不想用C.exe链接B和A。有没有一种方法可以只将B与C链接并完成工作,这样我就可以只向第三方提供B和C.exe

lib文件(或.A文件)是对象文件的集合,有点像zip文件,但没有压缩。因此,您不能真正将一个lib文件与另一个ib文件链接。

你可以做的是从两个较小的库中形成一个大型库——基本上是拆包,然后重新打包为一个。使用ar -x libfile.a提取模块,然后使用ar -a libfile2.a name1.o name2.o将对象文件添加到新库中。

但是,我只想告诉您的两个组件的用户针对这两个库进行链接。更简单的解决方案。