GMock无法编译 - 似乎没有定义GTEST_EXCLUSIVE_LOCK_REQUIRED

Tom*_*han 3 c++ cmake googletest googlemock

我正在尝试构建一个简单的模拟类

#include "interpolation.hpp"

#include <gtest/gtest.h>
#include <gmock/gmock.h>

class MockInterp1D : public Interp1DBase {
public:
    MOCK_METHOD1(evaluateAt, double(double));
    MOCK_METHOD2(evaluateAt, double(double, int));
};
Run Code Online (Sandbox Code Playgroud)

基于以下基类

class Interp1DBase {
public:
    virtual double evaluateAt(double) const = 0;
    virtual double evaluateAt(double, int) const = 0;
    virtual ~Interp1DBase() { };
};
Run Code Online (Sandbox Code Playgroud)

使用谷歌模拟.当我尝试编译使用此模拟的测试时,我收到以下错误:

In file included from /usr/include/gmock/gmock-generated-function-mockers.h:43:0,
                 from /usr/include/gmock/gmock.h:61,
                 from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/interpolation/interpolation-mocks.hpp:4,
                 from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/physics/B-field-tests.hpp:6,
                 from /home/tlycken/exjobb/Code/alpha-orbit-follower/test/physics/B-field-tests.cpp:2:
/usr/include/gmock/gmock-spec-builders.h:134:41: error: expected ‘;’ at end of member declaration
   bool VerifyAndClearExpectationsLocked()
                                         ^
Run Code Online (Sandbox Code Playgroud)

然后数百个类似的语法或定义错误都指向GMock中的文件.

我看一下gmock-spec-builder.h:134,发现了以下内容(在某些情况下):

// Verifies that all expectations on this mock function have been
// satisfied.  Reports one or more Google Test non-fatal failures
// and returns false if not.
bool VerifyAndClearExpectationsLocked()
    GTEST_EXCLUSIVE_LOCK_REQUIRED_(g_gmock_mutex);
Run Code Online (Sandbox Code Playgroud)

这让我相信GTEST_EXCLUSIVE_LOCK_REQUIRED_可能是一个由于某种原因没有定义的宏.事实上,在所有的头文件后挖包括从任gmock/gmock.h或者gtest/gtest.h我还没有发现宏的定义.

我在这做错了什么?


更新:

我已经能够产生一个简单的简单例子:

// in file mock-test.cpp
#include <gmock/gmock.h>
// Yeah, that's the only content
Run Code Online (Sandbox Code Playgroud)

编译

g++ -o mock-test.o -c mock-test.cpp
Run Code Online (Sandbox Code Playgroud)

导致相同的错误.

我已经安装了GMock sudo apt-get install google-mock,它给了我一个文件夹,/usr/src在我可以运行的地方,cmake .然后make生成我复制到的库文件/usr/lib.头文件已经存在,/usr/include所以我没有手动执行任何操作.

小智 6

当我尝试使用gmock 1.7与gtest 1.6进行编译时,我得到了同样的错误.确保使用相同版本的gtest.