当前位置: 代码迷 >> VC >> 急 LNK2022错误怎么解决
  详细解决方案

急 LNK2022错误怎么解决

热度:7198   发布时间:2013-02-25 00:00:00.0
急! LNK2022错误如何解决?
不熟悉.net,链接时遇到LNK2022错误,产生的部分错误信息如下,请高人们指点一下如何解决:


.obj : error LNK2022: (std.ostreambuf_iterator<char,std::char_traits<char> >): (0x02000097)。
.obj : error LNK2022: (std.ostreambuf_iterator<wchar_t,std::char_traits<wchar_t> >): (0x02000098)。
.obj : error LNK2022: (std._Iterator_base): (0x0200009f)。
.obj : error LNK2022: (std.logic_error): (0x020000a3)。
.obj : error LNK2022: (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x020000a4)。
.obj : error LNK2022: (std.domain_error): (0x020000a6)。
.obj : error LNK2022: (std.invalid_argument): (0x020000a7)。
.obj : error LNK2022: (std.length_error): (0x020000a8)。
.obj : error LNK2022: (std.out_of_range): (0x020000a9)。
.obj : error LNK2022: (std.runtime_error): (0x020000aa)。
.obj : error LNK2022: (std.overflow_error): (0x020000ab)。
.obj : error LNK2022: (std.underflow_error): (0x020000ac)。
.obj : error LNK2022: (std.range_error): (0x020000ad)。
.obj : error LNK2022: (std._Locinfo): (0x020000af)。
.obj : error LNK2022: (_Locimp): (0x020000b5)。
.obj : error LNK2022: (failure): (0x020000c1)。
.obj : error LNK2022: (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x020000d4)。
.obj : error LNK2022: (std._String_val<char,std::allocator<char> >): (0x020000ed)。
.obj : error LNK2022: (std.istreambuf_iterator<char,std::char_traits<char> >): (0x020000ef)。
.obj : error LNK2022: (std.istreambuf_iterator<wchar_t,std::char_traits<wchar_t> >): (0x020000f0)。
.obj : error LNK2022: (std._String_val<wchar_t,std::allocator<wchar_t> >): (0x020000f4)。
.obj : error LNK2022: (std._Container_base): (0x020000f6)。

------解决方案--------------------------------------------------------
错误消息 
元数据操作失败 (HRESULT) : error_message


链接器在合并元数据时检测到错误。必须解决元数据错误,链接才能成功。

诊断此问题的一种方式是在对象文件上运行 ildasm –tokens,以找出哪些类型的标记在 error_message 中列出了,并查找不同之处。在元数据中,即使只有 LayoutType 属性不同,同名的两个不同类型也是无效的。

导致 LNK2022 的一个原因是当一个类型(例如结构)位于多个同名 compiland 中,但定义冲突,并且您用 /clr 进行编译时。在此情况下,请确保该类型在所有 compiland 中具有相同的定义。该类型名称在 error_message 中列出。

导致 LNK2022 的另一个可能的原因是当链接器在为编译器(使用 #using)所指定位置之外的地方找到源数据文件时。确保元数据文件(.dll 或 .netmodule)在传递给链接器时位于与传递给编译器时相同的位置。

生成 ATL 应用程序时,如果至少在一个 compiland 中使用了 _ATL_MIXED,则需要在所有 compiland 中使用。

  相关解决方案