C++ iostream出现Clang macOS(自制)链接器错误

C++ iostream出现Clang macOS(自制)链接器错误,c++,clang,linker-errors,iostream,cout,C++,Clang,Linker Errors,Iostream,Cout,我想测试一些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

我想测试一些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::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

“std::_1::locale::use_facet(std::_1::locale::id&)const”,引用自:
std::_1::ctype const&std:_1::在main.cpp.o中使用方面(std:_1::locale const&)
“std::_1::ios_base::getloc()const”,引用自:
std::_1::basic_ios::main.cpp.o中的加宽(char)常量
“std::_1::基本字符串::_init(无符号长字符)”,引用自:
main.cpp.o中的std::_1::basic_string::basic_string(无符号长字符)
“std::uu 1::basic_string::~basic_string()”,引用自:
main.cpp.o中的std::uuu 1::ostreambuf_迭代器std:uuu 1::uu pad_和_输出(std::uu 1::ostreambuf_迭代器,char const*,char const*,char const*,std:u 1::ios_base&,char)
“std::uu 1::basic_ostream::sentry::sentry(std::u 1::basic_ostream&)”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
“std::_1::basic_ostream::sentry::~sentry()”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
“标准::_1::cout”,引用自:
_main in main.cpp.o
“std::_1::ctype::id”,引用自:
std::_1::ctype const&std:_1::在main.cpp.o中使用方面(std:_1::locale const&)
“std::_1::locale::~locale()”,引用自:
std::_1::basic_ios::main.cpp.o中的加宽(char)常量
“std::_u1::ios_base::_set_badbit_和_consupt_rethrow()”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
“std::_1::ios_base::clear(unsigned int)”,引用自:
main.cpp.o中的std::_1::ios\u base::setstate(unsigned int)
“std::terminate()”,引用自:
___呼叫在main.cpp.o中终止
“\uuuuuuuucxa\u begin\u catch”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
___呼叫在main.cpp.o中终止
“\uuuuuuuucxa\u end\u catch”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
“\uuuuuuugxx\u个性\u v0”,引用自:
main.cpp.o中的std::uuu 1::basic_uostream和std:uuu 1::uu put_character_序列(std::uuu 1::basic_uostream&,char const*,unsigned long)
main.cpp.o中的std::uuu 1::ostreambuf_迭代器std:uuu 1::uu pad_和_输出(std::uu 1::ostreambuf_迭代器,char const*,char const*,char const*,std:u 1::ios_base&,char)
main.cpp.o中的std::_u1::ostreambuf_迭代器::ostreambuf_迭代器(std::uu 1::basic_ostream&)
std::_1::basic_ios::main.cpp.o中的加宽(char)常量
main.cpp.o中的侏儒异常展开信息(_eh_frame)
ld:找不到架构x86_64的符号
clang-11:错误:链接器命令失败,退出代码为1(使用-v查看调用)
生成[3]:***[cpp20_测试]错误1
生成[2]:***[CMakeFiles/cpp20_test.dir/all]错误2
make[1]:***[CMakeFiles/cpp20_test.dir/rule]错误2
make:**[cpp20_测试]错误2
如果我使用STL的其他部分,如
vector
unique_ptr
或任何类型特征特性,所有功能都可以工作,包括新的C++20特性,如概念。 即使是
printf()
也可以正常工作

有人知道是什么导致了这个问题吗?我是怎么解决的

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

sudoxcode选择--switch/Library/Developer/CommandLineTools/

就这些