13

錯誤我最近升級到2012,從2005年(我敢肯定),建設我的解決方案時遇到了鏈接錯誤。經過幾個小時的搜索谷歌和周圍發現,我跑出了想法。我已經建立了幾十個項目,所以我非常肯定我做得很對,但公平地說,這已經過去了幾年。的Visual Studio 2012的鏈接與靜態庫

所以,作爲一個測試,我成立了一個新的項目。我稱之爲App,一個Windows應用程序(.exe)。我創建了另一個名爲Core的項目,並將其標記爲靜態庫(.lib),並將其標記爲Configuration Type。兩者都是解決方案的一部分。在Core中,我添加了Test.cpp和Test.h,其中包含一個具有簡單功能的小類。然後,在Window的應用程序WinMain.cpp文件中,我有WinMain(),我通過CTest測試調用此測試類;測試結果();

隨着這個我已經設置了項目應用的項目依賴是核心,最終加入到應用程序的附加包含目錄的路徑,核心代碼,其中Test.cpp的/的.h現場。

我得到以下鏈接錯誤,不能爲我的生命找出原因。有誰知道我可能錯過了哪些步驟,或者從以前的版本在2012年發生了哪些變化?非常感謝您的幫助!

1>------ Build started: Project: App, Configuration: Debug Win32 ------ 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::CTest(void)" ([email protected]@[email protected]) referenced in function [email protected] 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::~CTest(void)" ([email protected]@[email protected]) referenced in function [email protected] 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::Result(void)" ([email protected]@@QAEHXZ) referenced in function [email protected] 
1>D:\Work\Test_Linker_Stupidity\App\Debug\App.exe : fatal error LNK1120: 3 unresolved externals 
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ======== 

回答

27

Visual Studio 2005中做了一些魔術項目依賴它會自動在任何的.lib輸出鏈接(我很遺憾的是,幫助實現它的開發者)。這似乎已被刪除,因爲,我懷疑,Visual Studio 2010時,舊的Visual C++生成系統被替換爲MSBuild。

不過,該功能「的靜態庫的依賴關係自動連接」仍然可以通過項目的參考文獻中找到:

  • 右鍵單擊應用項目,並選擇「引用...」
  • 點擊「添加新參考「。
  • 檢查靜態庫項目,然後按確定。
  • 構建。

現在您應該看到自動鏈接的靜態庫。請注意,項目引用也意味着項目依賴關係。

如果你喜歡使用的一個項目,而不是依賴,你需要靜態庫添加到鏈接器的附加依賴屬性的「應用」項目,就像使用任何其他靜態庫輸入。

編輯:還有,你會看到一個名爲「鏈接庫相關性」的項目引用屬性。這將控制引用項目的.lib輸出是否被鏈接(默認爲true)。

+1

謝謝彼得!昨晚我在FB上碰到了一些朋友,他們指着我走向同一個方向。令人驚訝的是,我沒有找到任何引用相同解決方案的其他文章,所以希望這篇文章能夠在未來對其他人有所幫助。 我也嘗試添加庫的輸入,這當然有效,但遠遠不夠理想。我實際上已經忘記了我試過這個解決方案,簡單地說。 再次感謝您的幫助! –

+0

作爲快速參考,這是我指出的鏈接: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/d69aeb0d-e5fb-41e1-98ad-9b6c7b43a3ca/# c8b80c9a-2e8d-4a06-9d0f-a63ee15a208e –

+0

非常有用,謝謝彼得。 – Ken