2014-06-10 168 views
1

我安装使用apt-get install libgtest-devGTEST,未定义的引用“测试::测试::〜测试()”,测试::测试::测试()

,我试图以检查是否是工作GTEST或不。

所以我在eclipse中测试简单的代码。

但也有误差,

未定义参考 '测试::测试::〜测试()'
未定义参考 为 '测试::测试::测试()'

反之如果我改变在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(); 
} 

回答

1

安装libgtest-dev不安装任何gtest二进制文件。 它只是安装googletest源码包您的系统上 - 头 /usr/include/gtest下和源文件下/usr/src/gtest, 在那里你可以继续,如果你想与cmake或GNU自动 来构建它。

在Ubuntu/Debian软件频道 (或其他我知道的地方)中没有googletest的二进制包。正常的做法是到 download the source archive, 提取它并使用自己构建的二进制文件。源代码包中的README提供了有关构建和使用该库的指导。

正如您所做的那样,执行系统安装 源包通常没有任何用处。

你所遇到的链接错误:

undefined reference to 'testing::Test::~Test() 

无关你的代码:这是因为你不 连接libgtest,因为它不是由libgtest-dev安装 您无法链接它,你还没有自己建造它。

当您以 引起编译错误的方式更改代码时,此连接错误消失,因为如果编译失败 则不会发生连接。

+0

谢谢你,你说的没错,但是在构建gtest的src代码(我跟着这个[link](http://www.thebigblob.com/tag/libgtest-dev/))之后,其他错误仍然发生。 “make:*** [test] error 1”(test是项目名称),当然我已经添加了-lgtest标志。 – SangminKim

+0

抱歉,它工作,因为我添加-lpthread,最初-pthread是gtest所需要的? – SangminKim

+0

当您构建gtest时,您可以在不支持pthread的情况下对其进行配置: './configure --with-pthreads = no'。或者,您可以在制作时通过 预处理器标志'-DGTEST_HAS_PTHREAD = 0': 'CPPFLAGS = -DGTEST_HAS_PTHREAD = 0 make'。那么如果你的单元测试不需要它,你将不需要链接 'pthread'库。 –

5

我知道这听起来很明显,但我的心理调试技巧告诉我你忘记后目标文件名添加-lgtest当你链接您的最终二进制文件。

+0

这解决了我的问题。 –