我使用apt-get install libgtest-dev
我试图检查这是否有效。
所以我在eclipse中制作了简单的测试代码。
但有错误,
对'testing :: Test :: ~Test()'的未定义引用 未定义参考 'testing :: Test :: Test()'
相反,如果我将ATest类的继承更改为受保护,则错误消失,但
发生其他错误
测试::测试是“ATest_AAA_Test”无法访问的基础
有什么不对?
#include <iostream>
#include <gtest/gtest.h>
class A{
public:
int a;
A(int a){this->a = a;}
A(){}
~A(){}
int getA(){return a;}
void setA(int a){this->a = a;}
};
class ATest : public ::testing::Test{
public:
virtual void SetUp(){
a1 = A(1);
a2 = A(2);
a3 = A(3);
}
virtual void TearDwon(){}
A a1;
A a2;
A a3;
};
TEST_F(ATest, AAA){
EXPECT_EQ(1, a1.getA());
EXPECT_EQ(2, a2.getA());
EXPECT_EQ(3, a3.getA());
}
int main(int argc, char **argv){
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
答案 0 :(得分:7)
我知道这听起来很明显,但我的通灵调试技巧告诉我,当您链接最终二进制文件时,忘记在目标文件名后添加-lgtest
。
答案 1 :(得分:2)
安装libgtest-dev
不会安装任何gtest二进制文件。
它只是在您的系统上安装googletest源包 - 标头
在/usr/include/gtest
下,/usr/src/gtest
下的源文件,
您可以使用cmake
或GNU autotools继续构建它
如果你愿意的话。
ubuntu / debian软件频道中没有针对googletest的二进制包
(或我所知道的其他地方)。通常的做法是
download the source archive,
提取它并使用自己构建的二进制文件。 README
中的undefined reference to 'testing::Test::~Test()
源包提供了有关构建和使用库的指导。
执行系统安装通常没有任何意义 正如您所做的那样,源包。
您遇到的链接错误:
libgtest
与您的代码无关:它的发生是因为您不是
链接libgtest-dev
,您无法链接它,因为它未安装
{{1}}并且你没有自己构建它。
当您以某种方式更改代码时,此链接错误会消失 这会引入编译错误,因为如果编译失败 然后联系不会发生。