Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GMock不';t compile-GTEST_EXCLUSIVE_LOCK_REQUIRED似乎未定义_C++_Cmake_Googletest_Googlemock - Fatal编程技术网

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和gtest
libs
,我没有写更多的东西,只是为了产生尽可能短的复制错误的东西。如果我写不写一个类的主体是无关紧要的-编译器甚至没有达到那里,因为它阻塞了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/