首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CLR/CLI链接器出现错误,LNK2022 -自定义属性不一致

CLR/CLI链接器出现错误,LNK2022 -自定义属性不一致
EN

Stack Overflow用户
提问于 2013-09-02 10:57:00
回答 4查看 10.1K关注 0票数 16

环境: Visual Studio 10, CLR/CLI Class Library项目,由Platform Toolset v100构建,目标是框架版本v3.5

我知道这个问题已经在这里提出了,但我没有找到解决问题的答案,所以再次提出这个问题。

在构建CLR/CLI Class Library (DLL)项目时,链接器由于以下错误而失败:

代码语言:javascript
运行
复制
MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f7).
MSVCMRT.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000fb).
MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c000128).
MSVCMRT.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c00012c).
MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000ee).
MSVCMRT.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0000f1).
LINK : fatal error LNK1255: link failed because of metadata errors
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-08 06:52:13

我在途中学到的另一件事是,不能将值Platform ToolsetTarget Framework Version混为一谈。

我发现的可能组合如下:

.NET 3.5或更低:

  • Platform Toolsetv90,将使用Visual Studio 2008运行时二进制文件,
  • TargetFrameworkVersionv3.5 (或更少),
  • 在预处理器中,可以定义_WIN32_WINNT (例如,_WIN32_WINNT=0x0500)。

.NET 4.0或更高版本:

  • Platform Toolsetv100,将使用Visual Studio 2010运行时二进制文件,
  • TargetFrameworkVersionv4.0 (或更高),
  • 在预处理器中,不能定义 '_WIN32_WINNT=0x0500‘

如何定义这些值:

  1. Platform Toolset --在“项目设置”、“常规”、
  2. TargetFrameworkVersion -卸载项目,右键单击卸载的项目并选择“编辑”。打开'*.*proj‘文件后,修改以下行:<TargetFrameworkVersion>v3.5<TargetFrameworkVersion/>
票数 40
EN

Stack Overflow用户

发布于 2013-09-03 07:33:05

从C/C++预处理程序中删除_WIN32_WINNT=0x0500定义

显然,由于某些原因,上述预处理器定义与链接器不一致,导致链接器错误。我想这是微软内部的一些bug (?),但不确定。无论如何,在删除这个预处理器定义之后,所有的预处理器定义都正确地构建和链接了。

希望这些信息是有用的。

票数 2
EN

Stack Overflow用户

发布于 2016-05-02 12:05:28

在设置Windows版本的一些编译单元中,我有一些头文件:

代码语言:javascript
运行
复制
#define _WIN32_WINNT 0x0501

问题在于其他编译单元(c++文件)没有设置该变量,因此error LNK2022抱怨在多个编译单元(不同的文件)中以不同的方式编译相同的结构。

因此,我不能就这样取消_WIN32_WINNT定义,所以我的解决方案与之前所建议的完全相反。

我只是为整个项目设置了它,所以所有的编译单元都以相同的方式编译。

项目属性-> C/C++ ->预处理器->预处理器定义

代码语言:javascript
运行
复制
_WIN32_WINNT=0x0501;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18571546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档