【问题标题】:Linking of static lib with another static lib and use the master lib in a exe将静态库与另一个静态库链接并在 exe 中使用主库
【发布时间】:2013-07-29 12:27:04
【问题描述】:

在 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。

代码 -

//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;
    }

现在我的要求是—— 我不想将 B 和 A 都与 C exe 链接。有没有办法只将 B 与 C 链接并完成工作,以便我只能将 B 和 C exe 提供给第三方?

【问题讨论】:

标签: c++ c++builder


【解决方案1】:

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

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

但是,我只想告诉您的两个组件的用户链接到这两个库。更容易的解决方案。

【讨论】:

  • [1] g++ -c a.cpp -o a.o [2] ar rcs liba.a a.o [3] g++ -c b.cpp -o b.o -L。 -la [4] ar rcs libb.a b.o [5] g++ c.cpp -L. -lb -la ......你能告诉我该怎么做而不是这个吗??? :(
  • 是的,ar rcs liba.a a.o b.o
  • 换句话说,您构建一个库而不是两个。您无法通过“链接它们”将两个库合二为一。您必须构建一个包含所有必要目标文件的库。如果由于某些后勤原因不是一个好的解决方案,那么您需要链接到最终产品中的两个库。
  • 我明白你的意思...尝试了你的解决方案。这样可行!谢谢... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多