2014-11-23 151 views
0

在Ubuntu Linux上,我一直在遵循gtest指令給出here來安裝gtest,並分別手動將頭文件和庫複製到/usr/include/usr/lib如何編譯gtest cpp文件?

我又試圖編譯下面的代碼(test1.cpp

#include <gtest/gtest.h> 
TEST(MathTest, TwoPlusTwoEqualsFour) { 
    EXPECT_EQ(2 + 2, 4); 
} 

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

用下面的命令

g++ -lgtest -lgtest_main -lpthread test1.cpp 

正好看到另一個無益的錯誤信息:

/usr/bin/ld: /tmp/ccQlmghI.o: undefined reference to symbol '_ZN7testing8internal9EqFailureEPKcS2_RKSsS4_b' 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 

如何我能解決這個問題嗎?還是有另一個單元測試框架,可以以簡單的方式使用,並有一個工作示例?

同樣的問題已被要求here,但沒有答案。

回答

2

g++有關的參數順序很重要。源文件應該放在目標文件和庫(從高級庫到低級庫)之前,等等。閱讀有關invoking GCC的章節。

所以嘗試:

g++ -Wall -g -pthread test1.cpp -lgtest_main -lgtest -lpthread 
+0

創建一堆新錯誤:/usr/lib/gcc/x86_64-linux-gnu/4.8 /../../../../ lib/libgtest.so:未定義的引用'pthread_key_create' /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so:對'pthread_getspecific'的未定義引用 /usr/lib/gcc/x86_64-linux -gnu/4.8 /../../../../ lib/libgtest.so:未定義的引用'pthread_key_delete' /usr/lib/gcc/x86_64-linux-gnu/4.8/../ .. /../../lib/libgtest.so:未定義的引用'pthread_setspecific' collect2:錯誤:ld返回1退出狀態 – Alex 2014-11-23 16:49:48

+0

也許pthread沒有安裝或什麼? – Alex 2014-11-23 16:50:31

+0

您示例中的'-pthread'是什麼意思? – Alex 2014-11-23 16:51:16

-1

對於gtest庫鏈接到您的GTEST,似乎必須使用靜態GTEST庫(原因不明;見here)。因此,而不是使用命令行一樣

g++ -Wall -g -pthread test1.cpp -lgtest_main -lgtest -lpthread 

必須使用

g++ -Wall -g -pthread test1.cpp /usr/lib/libgtest.a 

這裏,庫位於/usr/lib,但根據gtest是如何安裝的文件libgtest.a位於somethere人。

+0

安裝gtest後你運行了'ldconfig'嗎? – 2014-11-23 17:34:48

+0

使用'-L'來指定庫的附加搜索路徑,而不是直接引用特定的'.a'文件。 – 2014-11-23 18:48:10