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

时间:2013-07-29 12:27:04

标签: c++ c++builder

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

  1. 将A与B链接时,我只指定了libA_proj.a的路径(不是lib名称,因为这似乎不可能!)

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

  3. 代码 -

    //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语言将B和A链接起来。有没有办法只将B与C链接并完成工作,以便我只能向第三方提供B和C exe?

1 个答案:

答案 0 :(得分:2)

lib文件(或.a文件)是目标文件的集合 - 有点像zip文件,但没有压缩。所以你不能真正将lib文件与另一个lib文件链接。

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

但是,我只是告诉两个组件的用户链接两个库。更简单的解决方案。