2008-10-09 77 views
1

我想在Visual C++ 2005(非託管C++)中使用我創建的靜態庫。我聲明瞭一個函數「int myF(int a);」到一個.h文件中,我將其實現在一個.cpp文件中,然後編譯它 - 生成.lib文件。我在VC++ 2005(也是本地C++)中創建一個新項目(一個單獨的解決方案),我添加包含文件和lib文件的路徑;當我調用函數myF時,鏈接器報告錯誤:「在函數_main中引用的錯誤LNK2019:未解析的外部符號_myF」。如果我在與庫項目相同的解決方案中創建客戶端項目,然後添加對庫項目的引用,它將起作用,但我不會像這樣實現所有內容,而是將外部庫添加到我的項目中。C++中的靜態庫的問題

有什麼不對?

謝謝。

回答

0

嘗試在鏈接器輸入中爲項目屬性設置附加依賴項。

2

您還需要在第二個項目中包含實際的.lib文件(而不僅僅是它的路徑)。

鏈接器設置中應該有一個選項來執行此操作。

2

僅列出可以找到MyStatic.lib的文件夾是不夠的。您必須明確告訴鏈接器Dependant.vcproj正在使用MyStatic.lib。

在VS2005中,您可以通過項目屬性 - >鏈接器 - >輸入 - >其他依賴項來執行此操作。你也可以在.h文件中添加一些預先指定的東西來告訴編譯器告訴鏈接器使用MyStatic.lib。

編輯: 預處理魔高一尺這​​樣

#pragma comment(lib, "MyStatic.lib") 
1

(編輯:這是它現在已經刪除了越來越鏈路相/ NODEFAULTLIB錯誤的問題的回答...聳肩)

如果您正在獲取defaultlib錯誤,您正在混合編譯器設置。例如,如果您在調試中構建庫並在發行版中構建主要版本,則會因爲使用不同版本的CRTL而生成此錯誤。如果您使用不同的設置將C運行時作爲對象庫或DLL鏈接,也會發生這種情況。 (請參閱C/C++選項,「運行時庫」設置下的「代碼生成」部分)

在許多項目中,如果無法更正庫的設置,例如第三方庫)。在這些情況下,您必須使用/ NODEFAULTLIB開關,該開關是「輸入」部分中名爲「忽略特定庫」的鏈接器選項。

但是既然你控制着主庫和庫,建立你的LIB文件的調試和發佈版本,或者確保你的「C/C++;代碼生成;運行時庫」設置在兩個項目中都匹配。