2009-12-17 70 views
0

這裏是一個C++項目,將它的lib依賴是使用共享庫的C++靜態庫鏈接。編譯會很好?

 
Hello.exe 
    -> A.so 
    -> B.a 
 
B.a 
    -> A.so 

HELLO.EXE取決於B.a和A.so,並B.a取決於A.so. GCC編譯器會鏈接Hello.exe成功嗎?

如果在Ba中有一個b.cc文件,其中包含A.so的頭文件ah,並且還使用了A.so的一些接口,那麼通過正確的「include」路徑設置,將b.cc編譯爲博應該是成功的。 但是,如果沒有A.so作爲輸入,B.a的鏈接將失敗,對吧?

 
gcc -c b.cc -I../A/include ;; successful 

gcc -a B.a b.o    ;; fail 

我在哪裏可以找到有關這些複雜的參照關係的細節庫鏈接文件...

感謝。

+0

我發現你的問題的措辭很難遵循,我不確定你實際上在問什麼。我認爲英語不是你的母語,但你能否看看是否有另一種方式可以說出這種話? – 2009-12-17 05:36:16

回答

1

靜態庫只是從編譯的.c/.cpp文件創建的對象文件的集合。 它不能有鏈接關係。

您需要指定鏈接的依賴既A.so和Ba當編譯HELLO.EXE

了我的頭頂部它會像

gcc -o Hello.exe B.a A.so 

作爲一個側面說明您應該重命名A.so到libA.so,而是做

gcc -o Hello.exe -lA B.a 

鏈接到A.so直接像例子1將要求A.so總是在同一個目錄中HELLO.EXE

如果使用示例2,則可以將libA.so放在任何位置,並使用LD_LIBRARY_PATH指向正確的目錄。