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?
The option
-lgtest
is attempting to link the dynamic librarylibgtest.so
. You wish to link the static library/home/user/gtest-1.7.0/lib/.libs/libgtest.a
.Instead of:
use:
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:Nope, the problem is with Gtest's build.
If you build it using the standard configure approach, it isn't supplying the
-lpthread
correctly to createlibgtest.so
. Hence, when you try building a final shared library that actually uses the pthread capability it fails.Instead, use the Cmake approach:
And then manually install these into
/usr/lib/
This version correctly links in libpthread into libgtest.
Use
-pthread
instead of-lpthread
(for linking with pthread-library), while you using gtest in your executable.OR
Move the
-lpthread
afterlibgtest.a
(sequence matters).To answer we probably need more information, are you on a 64 bit machine and downloaded a 32 bit library?
You need to specify
-pthread
after-lgtest
. The linker takes libraries in order, and only takes as much as it needs to resolve references which are undefined at that point.