如果您在頭文件中定義函數,編譯器將在生成.exe項目並將函數代碼的副本直接編譯到.exe項目時看到函數實現。在構建過程中,當鏈接器輪到時,沒有任何東西丟失,所以鏈接器很快樂,並且不會收到錯誤消息。
如果您在.cpp文件中定義函數,編譯器將不會看到函數實現。因此,它將提供一個對構建期間鏈接器輪換時需要解決的函數(即外部符號)的引用。要使鏈接器「看到」外部符號,您需要將.exe項目與.lib項目鏈接起來。建立鏈接依賴關係後,鏈接器將能夠找到外部符號並解析對由編譯器生成的函數的引用。由於您有一個.lib項目,它是一個靜態庫項目,鏈接器通過從.lib文件中獲取函數的代碼並將代碼的副本放入.exe文件來解析該符號。
這麼多理論。現在,讓您的.exe項目鏈接對你的.lib項目可能是最簡單的辦法就是通過增加一個參考:
- 在.exe項目的設置,選擇名爲「公共屬性」一節在部分的頂部名單。
- 您現在應該看到.exe項目具有的引用列表。該列表可能是空的。
- 單擊對話框底部的「添加新引用」按鈕並添加.lib項目作爲參考
- 當您在引用列表中選擇新引用時,您將看到該引用的一組屬性。確保名爲「鏈接庫依賴關係」的屬性設置爲true。這將導致.lib項目在生成.exe項目時作爲鏈接器的輸入自動添加。
如果您構建.exe項目,現在鏈接器錯誤將消失。
順便提一下,通過添加項目引用,您還告訴Visual Studio如果構建整個解決方案,則按正確順序構建兩個項目:首先是.lib項目,然後是.exe項目。
您正在使用哪個IDE? 「項目」和「解決方案」是IDE特定的術語。也許把它添加爲標籤? – Svaberg
編輯我的問題。謝謝。 – Tahlil
只需在您的項目中添加帶定義的cpp文件 –