這是歸屬於鏈接器工具錯誤 這一類。
無法解析的外部符號“symbol”
代碼引用了鏈接器無法在庫和對象文件中找到的內容(如函數、變量或標簽)。
可能的原因
該錯誤信息之後為致命錯誤 LNK1120。
具體原因
代碼問題
var1
,並試圖在另一個源文件中以 VAR1
訪問該變量時。F
的類實現和非類實現,請注意 C++ 范圍解析規則。編譯和鏈接問題
有關更多信息,請參見下列位於 MSDN Library 中的知識庫文章。在 MSDN Library 中,單擊“搜索”選項卡,將文章編號或文章標題粘貼在文本框中,然後單擊“列出主題”。如果按文章編號搜索,確保清除“僅搜索標題”選項。
通過庫文件選擇下的“工具” | “選項” | “項目” | “VC++ 目錄”對話框,您可以更改搜索順序。項目的“屬性頁”對話框中的“鏈接器”文件夾可能也包含可能已過期的路徑。
當安裝了新的 SDK(可能在不同的位置),但沒有將搜索順序更新為指向新位置時,可能會出現此問題。通常情況下,應將新 SDK 的 include 目錄和 lib 目錄的路徑放在默認 Visual C++ 位置的前面。另外,包含嵌入路徑的項目可能仍然指向舊路徑,這些路徑是有效的,但對於安裝到不同位置的新版本所添加的新功能已過期。
來自:http://www.zahui.com/html/9/35690.htm
編程摘要
若要利用 MFC 和 C 運行時對 Unicode 的支持,需要:
在生成程序之前定義 _UNICODE 符號。
在項目的屬性頁對話框中“鏈接器”文件夾的“輸出”頁中,設置 wWinMainCRTStartup 的入口點符號。
為 Unicode 字符串處理使用正確的 C 運行時函數。可以使用 wcs 函數族,但您可能更喜歡使用完全“可移植的”(支持國際化的)_TCHAR 宏。這些宏都以 _tcs 為前綴;它們一對一地替換 str 函數族。在“運行時庫參考”的國際化節中對這些函數有詳細介紹。有關更多信息,請參見 TCHAR.H 中的一般文本映射。
使用支持 Unicode 中描述的 _TCHAR 和相關的可移植數據類型。
Visual C++ 編譯器將編碼的字符串解釋為
L"this is a literal string"
指出這是 Unicode 字符的字符串。可以對文字字符使用相同的前綴。一般使用 _T 宏對字符串進行編碼,因此在 Unicode 下字符串編譯為 Unicode 字符串,不使用 Unicode 時字符串編譯為 ANSI 字符串(包括 MBCS)。例如,不使用:
pWnd->SetWindowText( "Hello" );
而使用:
pWnd->SetWindowText( _T("Hello") );
使用已定義的 _UNICODE,_T 將字符串翻譯為以 L 為前綴的格式;否則 _T 將字符串翻譯為不帶 L 前綴的格式。
提示 _T 宏與 _TEXT 宏相同。
一些函數需要獲取字符串的字符數;另一些函數需要獲取字符串的字節數。例如,如果已定義 _UNICODE,則下列對 CArchive 對象的調用無效(str
屬於 CString):
archive.Write( str, str.GetLength( ) ); // invalid
在 Unicode 應用程序中,由於每個字符都是雙字節寬,因此長度會給出字符數但不給出正確的字節數。所以必須使用:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid
它指定要寫入的正確字節數。
但是,MFC 成員函數是面向字符而非面向字節的,因此無需此額外的編碼:
pDC->TextOut( str, str.GetLength( ) );
CDC::TextOut 采用字符數而非字節數。
總之,MFC 和運行時庫對 Windows 2000 下的 Unicode 編程提供下列支持:
支持 Unicode
鏈接器工具錯誤 LNK2019