1.error LNK2019:unresolved external symbol *** referenced in functio...
當頭文件中聲明了一個函數,但是在相應的源文件中卻沒有對該函數進行定義,則會出現為“解決的外部符號”(unresolved external symbol )錯誤。另外,當一個函數調用了外部的一個庫文件中的函數,但是在當前project的properties中并沒有將所依賴的(dependent)庫文件包含進來時,也會出現這種錯誤。
綜上,當一個solution在linking時找不到所涉及到的函數的定義時就會出現“unresolved external symbol ”錯誤。
例如,下面是調用rapi的庫文件rapi.lib中的函數時,由于沒有將rapi.lib包含進來而導致的鏈接錯誤。
1>Linking...
WMFileSync.obj : error LNK2019: unresolved external symbol _CeFindClose@4 referenced in function "public: virtual long __stdcall CWMFileSync::IsFileExists(wchar_t *)" (?IsFileExists@CWMFileSync@@UAGJPA_W@Z)
【解決方案】
1. Project -> ** Properties... -> Configuration Properties -> Linker -> Input -> Additional Dependencies -> rapi.lib
另外,在此之前,還需添加rapi庫的相應目錄:Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Include files中添加C:\Program Files\Matrox Imaging\rapi\Include 以及 Tools -> Options -> Projects and Solutions -> VC++ Directories -> Show Directories for -> 在Library files中添加C:\Program Files\Matrox Imaging\rapi\LIB。添加目錄的目的是為了使VC在調用相應庫文件時不必總是使用絕對地址,VC可以通過文件名在所包含的目錄中進行搜索。這樣,前面的rapi.lib就不必使用絕對地址了。
【缺點】可移植性差,如果將原工程中的源文件和頭文件中的內容copy下來重新建立該工程時(例如:在電子書或網絡上找到的程序),仍需自己在工程中添加目錄及所需的庫文件。
2. 在程序前加入#pragma commet(lib, "rapi.lib")也可以達到相同的效果。