C++ GMock不';t compile-GTEST_EXCLUSIVE_LOCK_REQUIRED似乎未定义
我正在尝试构建一个简单的模拟类C++ GMock不';t compile-GTEST_EXCLUSIVE_LOCK_REQUIRED似乎未定义,c++,cmake,googletest,googlemock,C++,Cmake,Googletest,Googlemock,我正在尝试构建一个简单的模拟类 #包括“interpolation.hpp” #包括 #包括 类MockInterp1D:公共Interp1DBase{ 公众: 模拟方法1(评估,双(双)); 模拟方法2(evaluatest,double(double,int)); }; 基于以下基类 类数据库{ 公众: 虚拟双精度计算器(双精度)常数=0; 虚拟双精度计算器(双精度,整数)常数=0; 虚拟~Interp1DBase(){}; }; 使用谷歌模拟。当我尝试编译使用此模拟的测试时,我得到以下
#包括“interpolation.hpp”
#包括
#包括
类MockInterp1D:公共Interp1DBase{
公众:
模拟方法1(评估,双(双));
模拟方法2(evaluatest,double(double,int));
};
基于以下基类
类数据库{
公众:
虚拟双精度计算器(双精度)常数=0;
虚拟双精度计算器(双精度,整数)常数=0;
虚拟~Interp1DBase(){};
};
使用谷歌模拟。当我尝试编译使用此模拟的测试时,我得到以下错误:
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()
^
然后是数百个类似的语法或定义错误,都指向GMock中的文件
我查看了gmock spec builder.h:134
,发现了以下内容(在某些上下文中):
这让我相信,GTEST\u EXCLUSIVE\u LOCK\u REQUIRED\u
可能是一个由于某种原因没有定义的宏。事实上,在挖掘了gmock/gmock.h
或gtest/gtest.h
中包含的所有头文件后,我仍然没有找到该宏的定义
我做错了什么
更新: 我已经能够给出一个简单的最小示例:
// in file mock-test.cpp
#include <gmock/gmock.h>
// Yeah, that's the only content
导致相同的错误
我已经通过
sudo-apt-get-install-google-mock
安装了GMock,它在/usr/src
下给了我一个文件夹,在那里我可以运行cmake.
然后是make
生成库文件,并复制到/usr/lib
。头文件已经在/usr/include
中,所以我没有手动处理它们。我不知道如何在gcc
中使用g-mock。
但基本上我们在windows中使用的就是这样。
你的类定义是正确的。
你用过这些函数吗
EXPECT_调用(classobj,定义中的确切函数名)。至少(次(0))。返回(0)代码>
然后
classobj.definition()中的确切函数名
试试这个,我想应该有用。如果您想了解详细信息,请告诉我,我将用一些典型的示例对其进行扩展。我在尝试使用gmock 1.7和gtest 1.6进行编译时遇到了相同的错误。确保您使用的是相同版本的gtest。在/usr/src/gmock文件夹中有相应的源和标题
您的作业仅覆盖文件夹的全部内容:
/usr/src/gmock/gtest/src -> /usr/src/gtest/src
/usr/src/gmock/gtest/cmake -> /usr/src/gtest/cmake
/usr/src/gmock/gtest/CMakeLists.txt-> /usr/src/gtest/CMakeLists.txt
/usr/src/gmock/gtest/include/gtest -> /usr/include/gtest/
/usr/src/gmock/gtest/src->/usr/src/gtest/src
/usr/src/gmock/gtest/cmake->/usr/src/gtest/cmake
/usr/src/gmock/gtest/CMakeLists.txt->/usr/src/gtest/CMakeLists.txt
/usr/src/gmock/gtest/include/gtest->/usr/include/gtest/
谢谢你的回答!但是,在我尝试模仿任何东西之前,这就失败了-请参阅更新以获得一个仍然重现问题的更简单示例。@Tomas Lycken:编写正文,为什么只编写#include
?@TomasLycken:是否正确配置了gmock
?我的意思是libs
等等。你需要为你的项目提供Dr gmock和gtestlibs
,我没有写更多的东西,只是为了产生尽可能短的复制错误的东西。如果我写不写一个类的主体是无关紧要的-编译器甚至没有达到那里,因为它阻塞了gmock.h。我尝试过使用所有标志编译,以包括gmock和gtest库,但没有任何区别。这就是问题所在-我以前使用过gtest
,然后使用sudo-apt-get-install-gtest
,这显然带来了版本1.6。当我将gmock
添加到项目中时,它在包repo中不可用,因此我获取了源代码版本1.7,它捆绑了gtest
1.7。然而,由于我的搜索路径中仍然有较旧的gtest
标题和库(在/usr/include
和/usr/lib
下的某个地方),gcc
似乎更喜欢从那里抓取它们,导致了这个错误。
g++ -o mock-test.o -c mock-test.cpp
/usr/src/gmock/gtest/src -> /usr/src/gtest/src
/usr/src/gmock/gtest/cmake -> /usr/src/gtest/cmake
/usr/src/gmock/gtest/CMakeLists.txt-> /usr/src/gtest/CMakeLists.txt
/usr/src/gmock/gtest/include/gtest -> /usr/include/gtest/