2013-03-28 62 views
0

我有一個項目LibA,它是一個靜態庫,並使用第三方庫Lib3。項目LibA構建並執行得很好。如何正確處理靜態庫的依賴關係?

我有另一個項目Exe,這是一個可執行文件並使用LibA。這會編譯,但鏈接程序不會從Lib3中找到函數,這些函數僅在LibA中使用。

事情我已經嘗試:

  • 加入LIB3的位置,以項目埃克(相同的方式,LIB3在力霸引用)的Libary目錄路徑
  • 加入LIB3的位置附加鏈接
  • 的LIB3 * .lib文件複製到項目力霸(因而它能包含力霸* .LIB文件)

的輸出文件夾的庫目錄不管我怎麼努力我仍然得到LNK2019: Unresolved external symbol。只有當我在LibA中刪除實際調用到Lib3的代碼時,我才能夠正確編譯和鏈接項目Exe。

如何正確處理靜態庫的依賴關係?

編輯:一些代碼來澄清:

力霸包含LibA.h和LibA.cpp:

LibA.h:

class LibA { 
    void doSomething(); 
} 

LibA.cpp:

#include "LibA.h" 
#include "Lib3.h" 

void LibA::doSomething() { 
    //call stuff in Lib3.h 
} 

Exe.cpp:

#include "LibA.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    LibA a = new LibA(); 
    a.doSomething(); 
} 
+0

你在你的'Exe'項目路徑中添加了'Lib3'庫嗎?我認爲依賴關係不是「繼承的」,因此,當連接「Exe」時,編譯器應該知道「Lib3」的路徑,即使它沒有明確使用(但我可能是錯的,這就是爲什麼這是一個評論,而不是回答) –

+0

是的,我在Exe中添加了Lib3庫的路徑。同樣的問題。 – mort

+0

你有沒有添加庫Lib3的名字?不僅是路徑? –

回答

0

嘗試使用Visual Studio的dumpbin來查看lib3.lib是否已導出所需的功能。 如果你不這樣做,你需要在lib3.h中用__declspec(dllexport)聲明你的函數,以使其他模塊試圖鏈接到你的庫。

+0

我可以從我的LibA鏈接到Lib3就好了。如果我從Exe鏈接到LibA,LibA又鏈接到Lib3,問題纔會出現 – mort