dimanche 3 novembre 2019

What is causing GoogleTest Link Error macOS Mojave?

I'm not sure if I have a problem w/ requiring additional arguments to cmake, or a problem with my own Makefiles. I am trying to build and install googletest for use in one of my projects. I am running on macOS mojave, with cmake installed via Homebrew. To install googletest, I have done the following:

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake ..
make
make install

I compile my source and test files. Here is an example command that gets generated by the Makefile for compiling a file named Point2d.cpp:

clang++ -arch x86_64 -c -std=c++11 -O2 -I /usr/local/include -c -o ../build/core/Point2d.o core/Point2d.cpp

I then try to link all my object files. Here is the command generated by the makefile (where main.o is the object file containing the main function for running the tests):

clang++ -arch x86_64 ../build/core/Point2d.o ../build/Point2dTests.o ../build/main.o -o ../bin/test -L /usr/local/lib

Resulting link error:

Undefined symbols for architecture x86_64:
  "testing::InitGoogleTest(int*, char**)", referenced from:
      _main in main.o
  "testing::Test::SetUp()", referenced from:
      vtable for Point2dTests_Constructors_Test in PointTest.o
  "testing::Test::TearDown()", referenced from:
      vtable for Point2dTests_Constructors_Test in PointTest.o
  "testing::Test::Test()", referenced from:
      testing::internal::TestFactoryImpl<Point2dTests_Constructors_Test>::CreateTest() in PointTest.o
  "testing::Test::~Test()", referenced from:
      Point2dTests_Constructors_Test::~Point2dTests_Constructors_Test() in PointTest.o
      Point2dTests_Constructors_Test::~Point2dTests_Constructors_Test() in PointTest.o
  "testing::Message::Message()", referenced from:
      Point2dTests_Constructors_Test::TestBody() in PointTest.o
  "testing::UnitTest::GetInstance()", referenced from:
      _main in main.o
  "testing::UnitTest::Run()", referenced from:
      _main in main.o
  "testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)", referenced from:
      Point2dTests_Constructors_Test::TestBody() in PointTest.o
  "testing::internal::AssertHelper::~AssertHelper()", referenced from:
      Point2dTests_Constructors_Test::TestBody() in PointTest.o
  "testing::internal::GetTestTypeId()", referenced from:
      __GLOBAL__sub_I_PointTest.cpp in PointTest.o
  "testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, testing::internal::CodeLocation, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)", referenced from:
      __GLOBAL__sub_I_PointTest.cpp in PointTest.o
  "testing::internal::GetBoolAssertionFailureMessage(testing::AssertionResult const&, char const*, char const*, char const*)", referenced from:
      Point2dTests_Constructors_Test::TestBody() in PointTest.o
  "testing::internal::IsTrue(bool)", referenced from:
      testing::internal::SuiteApiResolver<testing::Test>::GetSetUpCaseOrSuite(char const*, int) in PointTest.o
      testing::internal::SuiteApiResolver<testing::Test>::GetTearDownCaseOrSuite(char const*, int) in PointTest.o
  "testing::internal::GTestLog::GTestLog(testing::internal::GTestLogSeverity, char const*, int)", referenced from:
      testing::internal::SuiteApiResolver<testing::Test>::GetSetUpCaseOrSuite(char const*, int) in PointTest.o
      testing::internal::SuiteApiResolver<testing::Test>::GetTearDownCaseOrSuite(char const*, int) in PointTest.o
  "testing::internal::GTestLog::~GTestLog()", referenced from:
      testing::internal::SuiteApiResolver<testing::Test>::GetSetUpCaseOrSuite(char const*, int) in PointTest.o
      testing::internal::SuiteApiResolver<testing::Test>::GetTearDownCaseOrSuite(char const*, int) in PointTest.o
  "testing::internal::AssertHelper::operator=(testing::Message const&) const", referenced from:
      Point2dTests_Constructors_Test::TestBody() in PointTest.o
  "typeinfo for testing::Test", referenced from:
      typeinfo for Point2dTests_Constructors_Test in PointTest.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [../bin/test] Error 1
make: *** [test] Error 2

Aucun commentaire:

Enregistrer un commentaire