2

ここでどのような問題が発生しているのかわかりません。

  • Mac クラン 3.1 cmake
  • gtest
  • いくつかのファイル
  • いくつかの C++11 機能を使用する
  • XCode ビルド ツールをダウンロードしてインストールしました

CMAKE_CXX_FLAGS = -Wall -std=c++0x -stdlib=libc++ -v

出力で正常にビルドされます...

[100%] Building CXX object CMakeFiles/soupbintcptest.dir/soupmessages_tests.cpp.o
clang version 3.1 (tags/RELEASE_31/final)
Target: x86_64-apple-darwin11.3.0
Thread model: posix

リンクすると、大量のエラーがダンプされます。ABI エラー? 私は、この C++11 名前空間マングリングが起こっていることを知っています。

Undefined symbols for architecture x86_64:

それらはすべて、次のstd::ようにリンクされない名前空間内のものです。

 "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::_Setprecision)", referenced from:
      testing::AssertionResult testing::internal::FloatingPointLE<float>(char const*, char const*, float, float) in libgtest.a(gtest-all.cc.o)
      testing::AssertionResult testing::internal::FloatingPointLE<double>(char const*, char const*, double, double) in libgtest.a(gtest-all.cc.o)
      testing::Message::Message() in libgtest.a(gtest-all.cc.o)

また

"std::cerr", referenced from:
      testing::internal::GTestLog::GetStream() in libgtest.a(gtest-all.cc.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      testing::UnitTest::AddTestPartResult(testing::TestPartResult::Type, char const*, int, testing::internal::String const&, testing::internal::String const&) in libgtest.a(gtest-all.cc.o)
      testing::internal::SingleFailureChecker::~SingleFailureChecker() in libgtest.a(gtest-all.cc.o)
      testing::internal::StringStreamToString(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >*) in libgtest.a(gtest-all.cc.o)
      testing::TestInfo::TestInfo(char const*, char const*, char const*, char const*, void const*, testing::internal::TestFactoryBase*) in libgtest.a(gtest-all.cc.o)
      testing::TestInfo::~TestInfo() in libgtest.a(gtest-all.cc.o)
      testing::internal::ReportInvalidTestCaseType(char const*, char const*, int) in libgtest.a(gtest-all.cc.o)
      testing::internal::XmlUnitTestResultPrinter::PrintXmlUnitTest(__sFILE*, testing::UnitTest const&) in libgtest.a(gtest-all.cc.o)
      ...

同じclang ++バージョンでgtestをビルドしたと思います。これらの問題を引き起こすために、ここで他に何が起こっているのかわかりません。

4

2 に答える 2

0

名前マングリングについて C++11 は何もありません。これは、最初の C++ 実装から続いています。ただし、標準ライブラリが見つからないため、同じ stdlib スイッチに対して gtest をビルドしておく必要があることを忘れないでください。

于 2012-06-30T09:43:02.040 に答える