【问题标题】:Clang macOS (Home Brew) linker error with iostreamiostream 的 Clang macOS (Home Brew) 链接器错误
【发布时间】:2020-10-21 11:55:44
【问题描述】:

我想测试一些 C++20 功能,所以我在 macOS Catalina 10.15.6 上通过 home brew 下载了最新版本的 Clang (11)。 一切正常,除了std::cout。我收到一个很大的链接器错误:

  "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
      std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in main.cpp.o
  "std::__1::ios_base::getloc() const", referenced from:
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main.cpp.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", referenced from:
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(unsigned long, char) in main.cpp.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in main.cpp.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
  "std::__1::cout", referenced from:
      _main in main.cpp.o
  "std::__1::ctype<char>::id", referenced from:
      std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in main.cpp.o
  "std::__1::locale::~locale()", referenced from:
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main.cpp.o
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
  "std::__1::ios_base::clear(unsigned int)", referenced from:
      std::__1::ios_base::setstate(unsigned int) in main.cpp.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in main.cpp.o
  "___cxa_begin_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
      ___clang_call_terminate in main.cpp.o
  "___cxa_end_catch", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
  "___gxx_personality_v0", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in main.cpp.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in main.cpp.o
      std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::ostreambuf_iterator(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in main.cpp.o
      std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in main.cpp.o
      Dwarf Exception Unwind Info (__eh_frame) in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [cpp20_test] Error 1
make[2]: *** [CMakeFiles/cpp20_test.dir/all] Error 2
make[1]: *** [CMakeFiles/cpp20_test.dir/rule] Error 2
make: *** [cpp20_test] Error 2

如果我使用 STL 的其他部分,如 vectorunique_ptr 或任何类型特征特性,一切正常,包括新的 C++20 特性,如概念。 即使printf() 也能正常工作。

有谁知道可能导致此问题的原因以及我该如何解决?

【问题讨论】:

    标签: c++ clang linker-errors iostream cout


    【解决方案1】:

    我想通了。

    您需要从 Apple 的开发者网站下载最新的 Xcode 命令行工具并安装它们。然后,您需要在终端中输入以下命令:

    sudo xcode-select --switch /Library/Developer/CommandLineTools/

    就是这样。

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2016-03-31
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2015-09-22
      • 2018-09-18
      • 2021-03-22
      • 1970-01-01
      相关资源
      最近更新 更多