undefined reference to `pthread_key_create' (linker error)

c++, googletest

Solution

The option `-lgtest` is attempting to link the dynamic library `libgtest.so`. You wish to link the static library `/home/user/gtest-1.7.0/lib/.libs/libgtest.a`.

Instead of:

g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread

use:

g++ main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread

Note that your commandline supplies no name for the resulting executable, which will default to `a.out`. If you want it called, e.g. `mytest`, then do:

g++ -o mytest main.cpp -I/home/user/gtest-1.7.0/include /home/user/gtest-1.7.0/lib/.libs/libgtest.a -pthread

Problem

I have downloaded gtest 1.7.0 sources from here: https://code.google.com/p/googletest/downloads/list and build the gtest .a files (lib files) on ubuntu 13.10: ``` Linux ubuntu 3.11.0-15-generic #23-Ubuntu SMP Mon Dec 9 18:17:04 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux ``` and the resulting lib is called: `libgtest.a`. In my main.cpp file Have: ``` #include <iostream> #include "gtest/gtest.h" int main(){ std::cout << "Test \n"; int argc = 2; char* cp01; char* cp02; char* argv[] = {cp01, cp02}; testing::InitGoogleTest(&argc, argv); return 0; } ``` From a terminal I build with: ``` g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lpthread -lgtest ``` which gives the following errors: ``` /home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_create' /home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_getspecific' /home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_key_delete' /home/user/gtest-1.7.0/lib/.libs/libgtest.so: undefined reference to `pthread_setspecific' collect2: error: ld returned 1 exit status ``` Based on this: error during making GTest I have also tried `-pthread` instead of `-lpthread` but gives same error: ``` g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -pthread -lgtest ``` EDIT: I have also tried to specifying `-pthread` as the last argument: ``` g++ main.cpp -I/home/user/gtest-1.7.0/include -L/home/user/gtest-1.7.0/lib/.libs -lgtest -pthread ``` same error What am I doing wrong?

Original source

Related problems