在VS.NET 2010中构建C ++单元测试项目时链接错误

时间:2011-09-26 01:36:12

标签: c++ visual-studio-2010 visual-c++ c++-cli linker-errors

我正在尝试构建一个非常简单的C ++单元测试项目。设置恰好与blog描述的完全相同。我构建了一个静态库TestLib.lib和一个名为TestProject的C ++单元测试项目。这两个项目都使用平台工具集v100。

Testlib只包含一个类。

BaseClass.h

#pragma once 

class BaseClass
{
public:
    void Method1();
};

BaseClass.cpp

#include "BaseClass.h"
#include <iostream>
#include <list>

using namespace std;

void BaseClass::Method1()
{
    list<int> dummy(0);
    cout << "Hello world";
}

TestProject只有一个测试用例。

#include "BaseClass.h"
#include <list>
.
.
.
[TestMethod]
void TestMethod1()
{
    BaseClass b;
    b.Method1();
};

看起来我#include <list>之后#include "BaseClass.h"(在test.cpp中)我会遇到以下链接错误。如果我取出#include <list>,我根本没有链接错误。

TestLib.lib(BaseClass.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification
MSVCMRT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<char,std::char_traits<char>,std::allocator<char> >): (0x0200003d).
MSVCMRT.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >): (0x02000063).
LINK : fatal error LNK1255: link failed because of metadata errors

如果我在测试程序中再添加一行,链接错误就会消失,如下所示:

#include "BaseClass.h"
#include <list>
.
.
.
[TestMethod]
void TestMethod1()
{
    std::list<int> dummy(0);
    BaseClass b;
    b.Method1();
};

但是,现在,我有两个链接警告。我不确定它们是否与之前的链接错误有关。

TestLib.lib(BaseClass.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library

任何人都可以解释原因吗?我想念一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

编译Debug配置时是否只显示错误?如果是这样,它可能与您的C ++运行时库链接有关:

http://social.msdn.microsoft.com/Forums/eu/vclanguage/thread/e5a78770-4d99-40b7-951f-e4466d2744a8