【问题标题】:VC++ project 64 bit migration issue: Linker errorVC++ 项目 64 位迁移问题:链接器错误
【发布时间】:2021-02-11 20:10:09
【问题描述】:

我试图将 VC++ 项目从 Win32 迁移到 x64 下面是该项目的项目配置

我收到以下构建错误(链接器)

1>ResourceCompile:
1>  Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>  
1>  Copyright (C) Microsoft Corporation.  All rights reserved.
1>  
1>  
1>MSVCMRTD.lib(mstartup.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: tagMSG; fields: <alignment member>): (0x04000037).
1>MSVCMRTD.lib(mstartup.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _SECURITY_ATTRIBUTES; fields: <alignment member>): (0x04000044).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: tagMSG; fields: <alignment member>): (0x04000033).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _SECURITY_ATTRIBUTES; fields: <alignment member>): (0x04000038).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _TP_CALLBACK_ENVIRON; fields: <alignment member>): (0x0400003e).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: tagMSG; fields: <alignment member>): (0x04000032).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _SECURITY_ATTRIBUTES; fields: <alignment member>): (0x04000037).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _TP_CALLBACK_ENVIRON; fields: <alignment member>): (0x04000038).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: tagMSG; fields: <alignment member>): (0x04000037).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _SECURITY_ATTRIBUTES; fields: <alignment member>): (0x0400003f).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _TP_CALLBACK_ENVIRON; fields: <alignment member>): (0x0400004a).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: tagMSG; fields: <alignment member>): (0x04000032).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _SECURITY_ATTRIBUTES; fields: <alignment member>): (0x04000037).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (80131188) : Inconsistent field declarations in duplicated types (types: _TP_CALLBACK_ENVIRON; fields: <alignment member>): (0x0400003d).
1>MSVCMRTD.lib(mstartup.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (tagMSG): (0x0200003a).
1>MSVCMRTD.lib(mstartup.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_SECURITY_ATTRIBUTES): (0x02000044).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (tagMSG): (0x02000035).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_SECURITY_ATTRIBUTES): (0x0200003a).
1>MSVCMRTD.lib(managdeh.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_TP_CALLBACK_ENVIRON): (0x0200003b).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (tagMSG): (0x02000033).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_SECURITY_ATTRIBUTES): (0x02000038).
1>MSVCMRTD.lib(mehvecdtr.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_TP_CALLBACK_ENVIRON): (0x02000039).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (tagMSG): (0x0200003a).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_SECURITY_ATTRIBUTES): (0x0200003f).
1>MSVCMRTD.lib(msilexit.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_TP_CALLBACK_ENVIRON): (0x02000040).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (tagMSG): (0x02000035).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_SECURITY_ATTRIBUTES): (0x0200003a).
1>MSVCMRTD.lib(puremsilcode.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_TP_CALLBACK_ENVIRON): (0x0200003b).
1>LINK : fatal error LNK1255: link failed because of metadata errors
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:12.02
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

我可以通过将结构成员对齐方式从 /Zp4 更改为 /Zp16 来解决上述错误,但是此更改会影响其他组件,有什么方法可以在不更改的情况下解决此错误结构成员对齐方式?

【问题讨论】:

  • 嗨,关于这个问题的任何更新?

标签: visual-studio visual-c++ msbuild


【解决方案1】:

也许您可以尝试以下步骤:

建议

1)如果您使用CLR,请遵循以下步骤:

如果您通过右键单击您的项目Properties-->Configuration Properties-->使用,首先禁用CLR选项>C/C++-->General-->将选项Common Language Runtime Support/clr改为No Common ....

然后,右键单击每个 cpp 文件(实际上需要 CLRProperties-->C/C++- ->常规-->通用语言运行时支持 /clr.

2) 右击项目Properties-->C/C++-->设置Debug Information Format 到Program Database /Zi

3)项目属性-->C/C++-->命令行下添加/clr:nostdlib /AI"%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" >-->其他选项

另外,在 C/C++Enable Minimal Rebuild 设置为 No(/RM-) 并将 Basic Runtime Checks 设置为 Default /strong> --> 代码生成

4) 在启用 clr 的文件上右键单击这些文件,将 Enable C++ Exceptions 设置为 No->属性 -->C/C++-->代码生成

另外,如果这些都没有帮助,我建议您可以与我们分享一些代码以帮助我们解决问题。

【讨论】:

  • 感谢您的回复,目前的解决方案是针对 .net 3.5 的,上面描述的方法需要 v4.0,我尝试过相同的方法,但看起来 /clr:nostdlib is not supported in .net 3.5
  • 你好像用过VC2008,具体的项目类型是什么?您是否创建了 mfc 项目?
  • 或者我想你可以在你的电脑上安装Net Framework 4 然后你就可以使用它了。此外,作为答案的补充,VC2008 太旧了,微软不再维护它。所以我建议你可以使用有更多改进的VS2019。而且您不必担心版本问题,只需尝试一下即可。使用v142(vc2019) 以该模式构建您的项目,然后尝试我的建议。
  • 该项目使用 /clr:oldsyntax 运行时,它在 VS2019 中已贬值,因此无法使用 v142,我尝试将项目迁移到 .net 4 并尝试了上述方法,仍然面临同样的错误。这是一个 MFC 项目@perry-qian-msft
猜你喜欢
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多