[英]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.