Googletest Undefined symbols for x86_64 architecture error

Let GTEST_DIR be an environment variable that preserves the googletest directory googletest . (I cloned googletest-master from googletest github repo .)

I cd 'ed in $GTEST_DIR , did mkdir build && cd build , then $GTEST_DIR following command:

 cmake .. -DCMAKE_C_COMPILER=$GNU-6.0.0/bin/gcc-6.0.0 -DCMAKE_CXX_COMPILER=$GNU-6.0.0/bin/g++-6.0.0 

where GNU-6.0.0 is the path to installing gnu. This created a Makefile inside $GTEST_DIR/build , which I changed as follows: I added

 CC = $GNU-6.0.0/bin/gcc-6.0.0 CXX = $GNU-6.0.0/bin/g++-6.0.0 

at the beginning, to make sure that the c and C ++ compilers to be used will be the ones I want to use. Then I ran make , which created the archive files libgtest.a and libgtest_main.a inside $GTEST_DIR/build .

Next step: in the same folder, I put the main file of the original test main.cpp containg:

 #include "path/to/gtest.h" int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc,argv); return RUN_ALL_TESTS(); } 

and a dummy_test.cpp dummy test containing:

 #include "path/to/gtest.h" TEST(dummy_test, test1) { EXPECT_EQ(1,1); } 

and a Makefile containing:

 CC = gcc-6.0.0 CXX = g++-6.0.0 CPPFLAGS += -isystem $(GTEST_DIR)/include LDFLAGS := -L/usr/lib -lpthread -L$(GTEST_DIR)/build -lgtest all : $(CXX) -o cpptests $(CPPFLAGS) ./main.cpp ./dummy_test.cpp $(LDFLAGS) clean : rm -rf ./cpptests 

Running make I have this output:

 Undefined symbols for architecture x86_64: "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::end() const", referenced from: testing::internal::XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libgtest.a(gtest-all.cc.o) "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const", referenced from: testing::internal::PrintStringTo(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_ostream<char, std::char_traits<char> >*) in libgtest.a(gtest-all.cc.o) __gnu_cxx::__enable_if<std::__is_char<char>::__value, bool>::__type std::operator==<char>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libgtest.a(gtest-all.cc.o) "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long) const", referenced from: bool testing::(anonymous namespace)::IsSubstringPred<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libgtest.a(gtest-all.cc.o) "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char, unsigned long) const", referenced from: testing::internal::SplitString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) in libgtest.a(gtest-all.cc.o) testing::internal::FormatDeathTestOutput(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libgtest.a(gtest-all.cc.o) "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const", referenced from: testing::internal::(anonymous namespace)::SplitEscapedString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libgtest.a(gtest-all.cc.o) ... ... ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status make: *** [all] Error 1 

All output is in this fragment , while the output of nm libgtest.a is in this fragment .

Accuracy: I'm on Mac OS X 10.10.5. Since I want to continue working by developing the code and testing it, while the above error with gcc / g++ 6.0.0 is resolved, I tried to switch to another compiler: clang , and I noticed that I had no error at all with it.

Note libgtest.a was originally (that is, before I asked this question), built "by mistake" with clang and used in tests with g++-6.1.0 , when I encountered an error, this is why I decided to rebuild libgtest.a with g++-6.1.0 , believing that this will solve the problem, but that did not help me post here.

+1
c ++ g ++ cmake gnu-make googletest
Aug 6 '16 at 9:10
source share

No one has answered this question yet.

See similar questions:

65
Convert std :: __ cxx11 :: string to std :: string
12
communication error while creating Google test on mac (command line)
10
CMake does not work with C ++ 11 on OSX
0
The GCC component ignores the characters in the library. A which I confirmed are present

or similar:

1399
What is an undefined link / unresolved external character error and how to fix it?
950
Undefined behavior and sequence points
56
Experimental :: file system linker error
0
suppress warnings from system headers not working
0
Error linking gtest project
0
gtest and MinGW
0
googletest and VS2010: cannot use EXPECT_EQ
0
How to create and use the GoogleTest shared library (.so) using g ++ on Linux?
0
Binding GoogleMock bugs to my C ++ project on Linux
0
multiple definition 'testing :: Matcher <std :: string const &> :: Matcher (std :: string const &)'



All Articles