标签:
这是归属于链接器工具错误 这一类。
无法解析的外部符号“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 编程提供下列支持:
C++链接器工具错误:LNK2001, LNK2019(转载)
标签:
原文地址:http://www.cnblogs.com/forzhongyou/p/4322086.html