对"pthread_key_create"的未定义引用;参数顺序不能解决问题



在 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++ -Wall -g -pthread test1.cpp -lgtest_main  -lgtest -lpthread  

只是为了看到以下错误:

/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的所有组合顺序。我总是得到同样的错误。

我不认为顺序是问题所在。它一定是别的东西。有人有什么想法吗?

要将gtest库链接到您的 gtest,似乎必须使用静态 gtest 库(出于未知原因;请参阅此处)。因此,而不是使用命令行,例如

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位于其他地方。

最新更新