未定义的引用`pthread_key_create&#39 ;;参数顺序不能解决问题

时间:2014-11-23 17:15:38

标签: c++ linux

在Ubuntu Linux上,我一直按照gtest给出gtest的说明安装/usr/include,手动将头文件和库复制到/usr/libtest1.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++ -Wall -g -pthread test1.cpp -lgtest_main  -lgtest -lpthread  

使用以下命令(建议herehere

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to `pthread_key_create'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to `pthread_getspecific'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to `pthread_key_delete'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgtest.so: undefined reference to `pthread_setspecific'
collect2: error: ld returned 1 exit status

只是为了看到以下错误:

g++

通用答案是关于-lpthread的参数的顺序。但是,我想我已经尝试了参数的l(有和没有-lgtest),-lgtest_main和{{1}}的每个组合顺序。我总是得到同样的错误。

我认为顺序不是问题。它必须是别的东西。任何想法?

1 个答案:

答案 0 :(得分:0)

要将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位于其他位置。