3

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

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

  2. 在 CI 中使用 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 提供给第三方?

4

1 回答 1

2

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

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

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

于 2013-07-29T12:38:52.070 回答