自定义属性不一致?

时间:2010-10-25 10:52:30

标签: c++ managed

我已将C ++库转换为托管,并在此代码行中收到以下错误:

std::ifstream fin(filename, std::ifstream::in);

错误:

Error 30 error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0003b5). C:\Users\Freeman\Documents\Visual Studio 2010\Projects\testsharp1\cpp1\MSVCMRTD.lib(locale0_implib.obj)


Error 32 error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0_Container_base12@std@@$$FQAE@XZ' (06000493) has inconsistent metadata with (0A000075) in MSVCMRTD.lib(locale0_implib.obj) C:\Users\Freeman\Documents\Visual Studio 2010\Projects\testsharp1\cpp1\LINK

Error 59 error LNK2034: metadata inconsistent with COFF symbol table: symbol '?memcpy@@$$J0YAPAXPAXPBXI@Z' (060004DD) has inconsistent metadata with (0A0003E3) in MSVCMRTD.lib(locale0_implib.obj) C:\Users\Freeman\Documents\Visual Studio 2010\Projects\testsharp1\cpp1\LINK

Error 60 error LNK1255: link failed because of metadata errors C:\Users\Freeman\Documents\Visual Studio 2010\Projects\testsharp1\cpp1\LINK

如何修改或更改代码行而不必更改其余代码?

2 个答案:

答案 0 :(得分:1)

基本上,您正在编译包含<fstream>标头的托管代码。这意味着来自<fstream>的所有声明都被编译为好像它们也被管理一样。然而,CRT DLL包含<fstream>的非托管版本。

在链接时,当导入lib MSVCMRTD.lib包含非托管std::_Container_base类时会检测到此情况,但您的.obj文件需要托管std::_Container_base

_C告诉我们它是一个实现助手类)。

答案 1 :(得分:1)

我知道这个问题已经过时了,但经过一周的努力解决这个问题后,我觉得我已经致力于将解决方案发布给那些可能会遇到类似错误的人。

在我的情况下,我有两个项目,一个没有管理std的所有地方(列表,向量和队列,这是一个应该在linux上运行的项目,所以我不能使用.net集合),以及纯标准C ++代码,在第二个项目中我创建了一个托管项目来包装这个类以用于.net项目,我使用Visual Studio 2010,尝试使用框架2.0,不幸的是VS 2010对VC ++没有很好的支持,而我尝试了一切强制它使用2.0,没有成功,每次我编译我得到同样恼人的消息“不一致的等待”。

我安装了VS 2008,将项目移植到2008年,瞧!一切都在10分钟内完成,我花了一周的时间试图在VS 2010和2008中解决这个问题。

我希望这可以节省很多时间来尝试解决在VS 2010上无法解决的问题。