2014-11-23 88 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