簡體   English   中英

gtest,未定義引用'testing :: Test :: ~Test()',testing :: Test :: Test()

[英]gtest, undefined reference to 'testing::Test::~Test()', testing::Test::Test()

我使用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();
}

我知道這聽起來很明顯,但我的通靈調試技巧告訴我,當你鏈接你的最終二進制文件時,忘記目標文件名之后添加-lgtest

安裝libgtest-dev不會安裝任何gtest二進制文件。 它只是在您的系統上安裝googletest源代碼包 - /usr/include/gtest下的頭文件和/usr/src/gtest下的源文件,如果需要,您可以使用cmake或GNU autotools繼續構建它。

在ubuntu / debian軟件頻道(或我所知的其他地方)中沒有針對googletest的二進制包。 通常的做法是下載源存檔 ,提取它並使用自己構建的二進制文件。 源包中的README提供了有關構建和使用庫的指導。

正如您所做的那樣,執行源程序包的系統安裝通常沒有任何意義。

您遇到的鏈接錯誤:

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

與你的代碼無關:它發生的原因是你沒有鏈接libgtest ,你無法鏈接它,因為它沒有被libgtest-dev安裝,你沒有自己構建它。

當您以引入編譯錯誤的方式更改代碼時,此鏈接錯誤消失,因為如果編譯失敗,則鏈接不會發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM