首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gtest,未定义为“Test::Test::~Test()”的引用,Test::Test::Test()

gtest,未定义为“Test::Test::~Test()”的引用,Test::Test::Test()
EN

Stack Overflow用户
提问于 2014-06-10 15:59:26
回答 2查看 15.1K关注 0票数 6

我使用apt-get install libgtest-dev安装了gtest

我正在试着检查这是否有效。

因此,我为eclipse中的测试编写了简单的代码。

但也有错误,

未定义的对“Test::Test::~Test()”的引用 未定义的对“Test::Test::Test()”的引用

相反,如果我将ATest类中的继承更改为受保护,则错误将消失,但是

另一个错误发生

测试::测试是“ATest_AAA_Test”不可访问的基础

怎么了?

代码语言:javascript
复制
#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();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-11 14:59:42

安装libgtest-dev不安装任何gtest二进制文件。它只需在/usr/include/gtest下的系统头和/usr/src/gtest下的源文件上安装googletest源代码包,如果您愿意,可以使用cmake或GNU构建它。

在ubuntu/debian软件通道(或我所知道的其他地方)中,没有用于googletest的二进制包。通常的做法是使用下载源代码存档,提取它并使用自己构建的二进制文件。源包中的README为构建和使用库提供了指导。

执行源包的系统安装通常没有任何用途,就像您所做的那样。

您遇到的链接错误:

代码语言:javascript
复制
undefined reference to 'testing::Test::~Test()

与您的代码无关:它的出现是因为您没有链接libgtest,而您不能链接它,因为它不是由libgtest-dev安装的,而且您也没有自己构建它。

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

票数 4
EN

Stack Overflow用户

发布于 2014-06-10 16:07:26

我知道这听起来很明显,但我的通灵调试技巧告诉我,在链接最后一个二进制文件时,您忘了在对象文件名之后添加-lgtest

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24145649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档