2010-10-25 70 views
4

我已经转换为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 '[email protected]@@[email protected]' (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 '[email protected]@[email protected]' (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 

如何修复或如何更改代码行,而不必改变其余的代码?

+1

+1实际上,在此粘贴您的错误的东西。大多数提问者似乎认为“这不起作用”是对错误的充分解释。 – 2010-10-25 10:57:29

回答

1

本质上讲,你正在编译托管代码,其中包括了<fstream>头。这意味着,从<fstream>所有声明被编译为,如果他们管理了。然而,CRT DLL包含<fstream>的非托管版本。

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

(该_C告诉我们,这是一个实现辅助类)。

+7

很高兴提供解决方法... – 2011-03-24 16:31:12

1

我知道这个问题是旧的,但1周后努力解决这个我觉得承诺后,我发现谁可以用类似的错误战斗的解决方案。

在我的情况下,我有两个项目,一个不受管理的std遍布整个地方(列表,向量和队列,这是一个应该在linux上工作的项目,所以我不能使用.net集合) C++代码,第二个项目我创建了一个托管项目来包装这个类,用于.net项目,我使用的是Visual Studio 2010,试图使用框架2.0,不幸的是VS 2010对VC++没有很好的支持,并且我想尽一切办法迫使它使用2.0,没有成功,每次我编我得到了同样恼人的消息“不一致等等”。

我安装了VS 2008,移植项目到2008年,瞧!一切工作在10分钟,我花了1周试图解决这个VS 2010和2008年的伎俩。

我希望这可以节省大量的时间,试图解决这个看似无法解决的VS 2010