gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:44 27 4
gpt4 key购买 nike

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

  • 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com