问题标签 [lnk2022]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3798 浏览

c++ - 链接器错误:LNK2022

我正在尝试在具有公共语言运行时支持的项目中使用 boost 线程。我收到以下链接器错误。错误 LNK2022:元数据操作失败(8013119F):存在一个 TypeRef,它应该但没有对应的 TypeDef:(虚拟):(0x01000073)。

如果我评论实例化 boost 线程的行,我不会收到任何链接器错误。

我试着在网上寻找修复这个错误,在一个这样的地方,建议在包含任何 boost 库之前使用“#define BOOST_THREAD_USE_DLL”。我试过这个,但它仍然给我同样的错误。

有一个相关的线程,(“LNK2022:元数据操作失败”让我发疯)但它不是同样的问题,但有点相似。我尝试了那里建议的修复,但仍然没有运气。

有谁知道如何解决这一问题?

0 投票
1 回答
3987 浏览

c++ - LNK2022:元数据操作失败:重复类型中的字段声明不一致

我在编译我的 C++ .NET 项目时遇到问题。

我读过“LNK2022:元数据操作失败”让我发疯——这不是我的情况,因为在我的情况下,我无法编译一个项目——它在链接时失败。我尝试了该主题的所有(两个)解决方案,但这对我没有帮助。

就在我将类更改为模板类时,此错误开始出现。我有 Vector2Di(用于 int 类型)类,现在需要完全相同的 float 类型,所以我将其重命名为 Vector2D 并将其更改为使用模板,现在我有:

它开始出现链接器错误:

错误 LNK2022:元数据操作失败(80131188):重复类型中的字段声明不一致(类型:NativeValue >;字段:m_NativeValue):(0x04000058)。

错误 LNK2022:元数据操作失败(8013118B):重复类型中实现的接口不一致(类型:NativeValue >;接口:System.IDisposable):(0x09000005)。

这两类错误。

简而言之:Vector2D 打算成为 C++ 值类型类 vector2d(也是模板)的包装 .NET 类。我必须将所有功能重定向到包装类,所以我需要存储它的值,但是因为我在 ref 类中不能有非托管的 valuetype 变量(编译错误出现),我在该 valuetype 上使用了一个指针,但是这个指针应该被分配和在某处释放,并且我设计了 ref 类 NativeValue - 它也是模板,它将值类型存储为引用并注意及时删除它。

是这里:

此外,现在又出现了一件奇怪的事情。当我将这些类型的使用从 cpp 文件转移到头文件时,它编译正常——这很奇怪。

我已经预编译了头文件 stdafx.cpp,并且我在 stdafx.h 中包含了所有基本类型(如 Vector2D);然后每个简单的文件都包含 stdafx.h 并使用这些类型。

请,如果您发现任何可能的错误 - 告诉我。谢谢你。

0 投票
1 回答
1923 浏览

visual-studio-2010 - 将 VS 2008 解决方案移动到 VS 2010 时,自定义属性不一致的错误

我正在尝试将我的 VS 2008 解决方案移动到 VS 2010。如果我将目标框架保持在 4.0,一切都可以完美运行(编译和链接)。

当我更改框架 2.0 并更改平台框架 v100(以克服编译错误)时,却遇到元数据链接错误,如下所示:

错误 LNK2022:元数据操作失败(80131195):自定义属性不一致:(0x0c0000f7)。C:\Development\Main\Filemaster\SoxService\MSVCMRTD.lib(managdeh.obj)

我读过我应该使用 ILDAsm,但它不喜欢我的 obj 文件,而且由于链接没有完成,我没有要加载的 exe。

任何人都可以就如何找到错误种类提供一些建议吗?

我最讨厌的就是与工具作斗争!

0 投票
1 回答
2342 浏览

c++ - LNK 2022:迁移到 VS2010 后布局信息不一致

我有一个 VS2010 解决方案,其中包含(除其他外)以下项目:

  • Native.DLL(静态链接到第三方库 ITK 的本地 C++ 项目,其中包括 STL)

伪代码(非常简化):

  • Wrapper.DLL(动态链接到 Native.DLL 并在调用 Native.DLL 时使用 std:string 的 C++/CLI 项目)

伪代码(非常简化)

这在 VS2008 (x64) 中完美编译和链接,但是在迁移到 VS2010 后(由于各种原因),链接器给出以下错误:

我已经阅读了几乎所有我能找到的关于这个问题的帖子并尝试过:

  • 清理和重建
  • 移动标题- 没有对 windows.h 的引用,我尝试移动 #include 行但没有效果
  • 仅在 Wrapper.DLL 中需要它的文件上使用 /clr 标志(这恰好是项目中的所有文件)。问题是 Native.DLL 中需要被 Wrapper.DLL 调用的公共方法在其签名中包含一个 std:string 参数。这使得很难将 STL 引用与 /clr 编译的范围分开
  • 我正在使用 /MDd编译所有内容(包括 ITK、第 3 方库) (并尝试过 /MD)——更改此设置似乎不会影响事情
  • 我没有看到/Zp 或 pragma pack在任何地方使用

我能想到的唯一“解决方案”是将 Native.DLL 中的方法更改为不使用 std:string 作为参数(例如使用 char* 代替)。然而,避免在任何 C++/CLI 包装器中使用 STL 似乎不是一个解决方案。一定有更好的办法!

注意:我知道有关如何“调试”这些问题的文章(链接),但除非我弄错了,否则我想我知道问题的根源是 std:string。

0 投票
1 回答
842 浏览

c++ - 错误 LNK2022 元数据操作失败(8013118D):重复类型中的布局信息不一致(ChooseDeviceParam):(0x02000273)

我最近得到了一个 .NET 项目来编译,而无需从以前的开发人员那里得到进一步的知识,并且在修复了大多数错误之后(我使用的是 Visual Studio 2017,项目的先前版本是这样的)

我仍然收到错误

行抑制状态错误 LNK2022 元数据操作失败(8013118D):重复类型中的布局信息不一致(ChooseDeviceParam):(0x02000273)。

这是声明“ChooseDeviceParam”的部分代码(VideoSourceList.cpp)

这是 VideoSourceList.h

这是不工作部分的属性

谢谢你的帮助。