0

CMake を使用して C++11 を使用するライブラリのテストをコンパイルしようとしています。Ubuntu で C++11 を使用して UnitTest++ を使用することに成功しましたが、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++ ライブラリの 2 つの実装があります。GNU の libstdc++ にはヘッダー ファイルがあり/usr/include/c++/4.2.1、Clang の libc++ にはヘッダー ファイルがあります/usr/lib/c++/v1/

のコピーはlibunittest++.aGNU の libstdc++ でコンパイルされているように見えるため、プログラムに同じライブラリを使用して問題を修正できます。

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

libunittest++.aまたは、Clang の libc++ を使用して再コンパイルします。

より役立つ情報については、この質問も参照してください。

于 2013-10-06T09:06:09.147 に答える