繁体   English   中英

在Mac上编译时,当我使用“ gcc”进行编译但不使用clang ++时,会出现此错误

[英]When compiling on my Mac, i get this error when i use “gcc” to compile but not with clang++

当我尝试在Mac上编译C ++代码时出现此错误。 我已经在PC上编程了一段时间,但刚得到一台Mac笔记本电脑来进行UNI工作,我已经习惯了。 我通常使用“ gcc”进行编译,但似乎无法正常工作。 任何帮助,将不胜感激。 在此之前,请在编译时使用“ clang ++”。

或者,如果我使用“ gcc”进行编译,并且代码中存在错误,则可以正常工作。 仅当没有错误时才会发生这种情况。

Michaels-MacBook-Pro:C++ Michael$ cc HelloWorld.cpp 
Undefined symbols for architecture x86_64:
  "std::__1::locale::use_facet(std::__1::locale::id&) const", 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 HelloWorld-97feed.o
  "std::__1::ios_base::getloc() const", 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 HelloWorld-97feed.o
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", 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 HelloWorld-97feed.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 HelloWorld-97feed.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 HelloWorld-97feed.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 HelloWorld-97feed.o
  "std::__1::cout", referenced from:
      _main in HelloWorld-97feed.o
  "std::__1::ctype<char>::id", 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 HelloWorld-97feed.o
  "std::__1::locale::~locale()", 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 HelloWorld-97feed.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 HelloWorld-97feed.o
  "std::__1::ios_base::clear(unsigned int)", 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 HelloWorld-97feed.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in HelloWorld-97feed.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 HelloWorld-97feed.o
      ___clang_call_terminate in HelloWorld-97feed.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 HelloWorld-97feed.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 HelloWorld-97feed.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 HelloWorld-97feed.o
      Dwarf Exception Unwind Info (__eh_frame) in HelloWorld-97feed.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

gccclangcc (在您的系统上似乎是clang的符号链接)是用于生成C程序的命令。

g++clang++是用于构建C ++程序的命令。

C和C ++是两种不同的语言。

尽管所有这些命令通常只是通向后台大型编译器的“前门”,而后者能够构建各种内容,但某些默认值取决于您输入的实际命令。 例如,执行gcccc不会自动将C ++标准库添加到链接到程序中的库中。

阅读文档 ,然后使用正确的命令在您的工具链中构建C ++程序。 对于Clang,就是clang++ (如您clang++ )。 对于GCC,那就是g++

在以前的Xcode版本中,Apple曾同时发行libstdc ++和libc ++。 为了防止名称冲突,libc ++的维护者将std ::名称空间别名为std :: __ 1。

发生的事情是g ++(默认使用libstdc ++)链接到使用clang编译的库(默认使用libc ++)

实际上,Xcode仍随附stdlibc ++,但据我所知它已过时。

困惑?

我也是。

除非您确切知道自己在做什么,否则最好在Mac上使用clang ++编译所有内容。 实际上,更高版本的Xcode将g ++视为clang ++的同义词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM