2013-07-29 53 views
3

在eclipse中,我使用MinGW編譯器在windows平臺下完成 - C_proj.exe ---> links ----> libB_proj.a ----->鏈接----> libA_proj.a鏈接靜態lib與另一個靜態庫,並使用一個exe文件中的主庫lib

  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文件?

+0

確實有辦法,但我不知道如何使用你的工具來做。 [這是你如何在Visual Studio中完成的工作](http://i.imgur.com/X2hE2Bu.jpg) – typ1232

+0

@ typ1232:我認爲'.lib'是一個.dll的thunk-library –

+0

http://stackoverflow.com/questions/12198261/include-static-library-in-static-library – Derek

回答

2

lib文件(或.a文件)是目標文件的集合 - 有點像zip文件,但沒有壓縮。所以你不能真正地鏈接一個lib文件與另一個lib文件。

你可以做的是從兩個較小的圖書館形成一個大型圖書館 - 本質上是拆包,然後重新打包。您使用ar -x libfile.a來提取模塊,然後您可以使用ar -a libfile2.a name1.o name2.o將目標文件添加到新庫中。

但是,我只是告訴你的兩個組件的用戶鏈接到兩個庫。更簡單的解決方案。

+0

[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 ...........你能告訴我該怎麼做而不是這個嗎? :( –

+0

是的,'ar rcs liba.a ao bo' –

+0

換句話說,你建立了一個庫而不是兩個,你不可能通過「連接它們」把兩個庫合併成一個庫。包含所有必要的目標文件,如果這樣,出於某些後勤原因不是一個好的解決方案,那麼你需要鏈接到最終產品中的兩個庫 –

相關問題