error LNK2019:unresolved external symbol *** referenced in function ***的解決方案

      當頭文件中聲明瞭一個函數,但是在相應的源文件中卻沒有對該函數進行定義,則會出現爲“解決的外部符號”(unresolved external symbol )錯誤。另外,當一個函數調用了外部的一個庫文件中的函數,但是在當前project的properties中並沒有將所依賴的(dependent)庫 文件包含進來時,也會出現這種錯誤。

      綜上,當一個solution在linking時找不到所涉及到的函數的定義時就會出現“unresolved external symbol ”錯誤。

       例如,下面是調用MIL的庫文件mil.lib中的函數時,由於沒有將mil.lib包含進來而導致的鏈接錯誤。

1>Linking...
1>MDispSelect.obj : error LNK2019: unresolved external symbol _MappFree@4 referenced in function _main
1>MDispSelect.obj : error LNK2019: unresolved external symbol _MsysFree@4 referenced in function _main
1>MDispSelect.obj : error LNK2019: unresolved external symbol _MdispFree@4 referenced in function _main

      【解決方案】

      1. Project -> ** Properties... -> Configuration Properties -> Linker -> Input -> Additional Dependencies -> mil.lib

另外,在此之前,還需添加MIL庫的相應目錄:Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Include files中添加C:/Program Files/Matrox Imaging/Mil/Include  以及  Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Library files中添加C:/Program Files/Matrox Imaging/Mil/LIB。添加目錄的目的是爲了使VC在調用相應庫文件時不必總是使用絕對地址,VC可以通過文件名在所包含的目錄中進行搜索。這 樣,前面的mil.lib就不必使用絕對地址了。

      【缺點】可移植性差,如果將原工程中的源文件和頭文件中的內容copy下來重新建立該工程時(例如:在電子書或網絡上找到的程序),仍需自己在工程中添加目錄及所需的庫文件。

      2. 在程序前加入#pragma commet(lib, "mil.lib")也可以達到相同的效果。

      【優點】避免了方案1所出現的問題。

 

轉自: http://www.cnblogs.com/tekson/archive/2009/06/17/1505196.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章