iostream的clang macOSHome Brew链接器错误

问题描述

我想测试一些C ++ 20功能,所以我通过macOS Catalina 10.15.6上的家庭酿造工具下载了最新版本的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::allocator<char> >::basic_string(unsigned long,char) in main.cpp.o
  "std::__1::basic_string<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*,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> >&,unsigned long) in main.cpp.o
  "std::__1::basic_ostream<char,std::__1::char_traits<char> >::sentry::~sentry()",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()",std::__1::char_traits<char> >::widen(char) const in main.cpp.o
  "std::__1::ios_base::__set_badbit_and_consider_rethrow()",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",unsigned long) in main.cpp.o
      ___clang_call_terminate in main.cpp.o
  "___cxa_end_catch",unsigned long) in main.cpp.o
  "___gxx_personality_v0",unsigned long) in main.cpp.o
      std::__1::ostreambuf_iterator<char,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()都可以。

有人知道什么可能导致此问题以及如何解决吗?

解决方法

我知道了。

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

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

仅此而已。