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?