0

我正在尝试为使用 CMake 的 C++11 库编译测试。我在 Ubuntu 上使用 UnitTest++ 和 C++11 取得了成功,但是 Mac OS X 给了我链接器错误。

在 CMake 中,我的 APPLE 链接器标志和库如下所示:

SET(CMAKE_CXX_FLAGS "--stdlib=libc++ --std=c++11")
TARGET_LINK_LIBRARIES(mytest unittest++)

用这个编译会给我链接器错误,例如:

Undefined symbols for architecture x86_64:
  "std::string::c_str() const", referenced from:
      UnitTest::MemoryOutStream::GetText() const in libunittest++.a(MemoryOutStream.o)
  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:
      UnitTest::MemoryOutStream::GetText() const in libunittest++.a(MemoryOutStream.o)
  "std::ostream::~std::ostream()", referenced from:
      construction vtable for std::ostream-in-UnitTest::MemoryOutStream in libunittest++.a(TestRunner.o)
      construction vtable for std::ostream-in-UnitTest::MemoryOutStream in libunittest++.a(Test.o)
....

这是完整的粘贴

4

1 回答 1

0

看起来您的副本libunittest++.a是使用标准 C++ 库的不同实现编译的。在 OS X 上,标准 C++ 库现在有两种实现:GNU 的 libstdc++,其头文件位于/usr/include/c++/4.2.1.Clang 的 libc++,其头文件位于/usr/lib/c++/v1/.

您的副本libunittest++.a似乎已使用 GNU 的 libstdc++ 编译,因此您可以通过为您的程序使用相同的库来解决此问题:

SET(CMAKE_CXX_FLAGS "-stdlib=libstdc++ -std=c++11")

libunittest++.a或者使用 Clang 的 libc++重新编译。

另请参阅此问题以获取更多有用信息。

于 2013-10-06T09:06:09.147 回答