在Ubuntu Linux上,我一直按照gtest
给出gtest
的说明安装/usr/include
,手动将头文件和库复制到/usr/lib
和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
只是为了看到另一个无用的错误消息:
{{1}}
我该如何解决这个问题?或者是否有另一个单元测试框架可以以简单的方式使用,有一个工作示例?
同样的问题被问到here,但没有回答。
答案 0 :(得分:3)
g++
的参数顺序非常重要。源文件应该在目标文件和库之前(从高级库到低级库)等。阅读invoking GCC上的章节。
所以试试:
g++ -Wall -g -pthread test1.cpp -lgtest_main -lgtest -lpthread
答案 1 :(得分:-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
位于其他位置。