单元测试不一致的dll链接导致编译错误

时间:2015-04-16 21:25:32

标签: c++ performance visual-studio-2013 native

c ++新手并尝试测试dll但继续

warning C4273: 'CRootFinder::SquareRoot' : inconsistent dll linkage 

RootFinder.h

#ifdef MY_EXPORTS
#define API _declspec(dllexport)
#else
#define API _declspec(dllimport)
#endif

class API CRootFinder {
public:
    CRootFinder(void);
    double SquareRoot(double v);
};

RootFinder.cpp

#include "stdafx.h"
#include "RootFinder.h"

double CRootFinder::SquareRoot(double v)
{
    return 0.0;
}

构建但上面会收到警告。

在单元测试项目中添加了对dll的引用

unittest1.cpp

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../c source/RootFinder.h"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace Tests
{       
    TEST_CLASS(UnitTest1)
    {
    public:

        TEST_METHOD(TestMethod1)
        {
            CRootFinder rooter;
            Assert::AreEqual(
                // Expected value:
                0.0,
                // Actual value:
                rooter.SquareRoot(0.0),
                // Tolerance:
                0.01,
                // Message:
                L"Basic test failed",
                // Line number - used if there is no PDB file:
                LINE_INFO());
        }

    };
}

不会建立

  

错误2错误LNK2019:未解析的外部符号" __ declspec(dllimport)public:__ thishisall   CRootFinder :: CRootFinder(无效)" (__imp _ ?? 0CRootFinder @@ @ QAE XZ)   在函数中引用" public:void __thiscall   测试:: UnitTest1 :: TestMethod1(无效)"   (?TestMethod1 @ UnitTest1 @ Tests @@ QAEXXZ)

1 个答案:

答案 0 :(得分:2)

使用MY_EXPORTS预处理器marco编译dll。添加在没有MY_EXPORTS定义宏的测试中使用它。

在Visual Studio中,您可以执行此操作:Project right click->Propertis->C/C++->Preprocessor->Preprocessor Definitions,只需将MY_EXPORTS添加到dll项目的列表中,并将该列表保留为没有MY_EXPORTS用于测试项目。

您需要在CRootFinder()中定义构造函数RootFinder.cpp