c++ - clang mac 链接错误与 gtest 体系结构 x86_64 的 undefined symbol

标签 c++ macos cmake clang

不确定我在这里遇到了什么问题。

  • Mac clang 3.1 cmake
  • 测试
  • 几个文件
  • 使用少量 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。不确定这里还有什么原因会导致这些问题。

最佳答案

当链接器将不同的 c++ 库拉入与编译器正在构建的库相匹配的库时,我看到了与您类似的错误。在您的情况下,您只是修改了编译器标志,但链接器不知道您的选择,并且很可能链接到错误的 C++ 库。

如果您能够使用 CMake 3.2 或更高版本,那么与其直接修改 C++ 编译器标志,我建议您直接告诉 CMake 您想要使用 C++11,然后让它找出合适的编译器,然后链接器标志给你。这可以通过在您的 project() 调用之前添加以下内容来完成:

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

此功能和相关的 CMake 功能在 this article 中有详细讨论。 .

关于c++ - clang mac 链接错误与 gtest 体系结构 x86_64 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273006/

相关文章:

c++ - Clion:如何正确地将图像、xml、资源...添加到 cmake

c++ - 有没有办法在结构中存储日期和时间? C++

c++ - 如何在qt中调试xcode项目?

macos - 我是否在核心文本中遗漏了一些内容,可以让我看到某个点位于哪一行以及一行的实际高度(包括段落样式)?

macos - 在 OSX 上的 Monodevelop 中调试不太有效

macos - Xcode 7 中的 NSToolbar 使用 Storyboard(NSWindowController -> NSSplitViewController)

opencv - FreeBSD 上 OpenCV 2.4.3 中的头文件问题

c++ - 应用 std::move 后对象实例会发生什么

c++ - 如何在 macOS 上使用 qmake 获取没有 .app 的二进制文件?

c++ - Cmake 找不到 Boost 库