C++ 无法编译一个";“你好,世界”;我的OSX中的cpp

C++ 无法编译一个";“你好,世界”;我的OSX中的cpp,c++,macos,C++,Macos,我在mac上写了一个hello world程序,但当我编译它时,编译器输出了一个错误: 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> >&am

我在mac上写了一个hello world程序,但当我编译它时,编译器输出了一个错误:

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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.o
  "std::__1::cout", referenced from:
      _main in endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.o
  "std::terminate()", referenced from:
      ___clang_call_terminate in endian0-654ab7.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 endian0-654ab7.o
      ___clang_call_terminate in endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.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 endian0-654ab7.o
      Dwarf Exception Unwind Info (__eh_frame) in endian0-654ab7.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
架构x86_64的未定义符号: “std::uu 1::locale::use_facet(std::u 1::locale::id&)const”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_1::ios_base::getloc()const”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_1::基本字符串::_init(无符号长字符)”,引用自: std::uu 1::ostreambuf_迭代器std:u 1::u pad_和_输出(std::u 1::ostreambuf_迭代器,char const*,char const*,char const*,std:u 1::ios_base&,char)在endian0-654ab7.o中 “std::uu 1::basic_string::~basic_string()”,引用自: std::uu 1::ostreambuf_迭代器std:u 1::u pad_和_输出(std::u 1::ostreambuf_迭代器,char const*,char const*,char const*,std:u 1::ios_base&,char)在endian0-654ab7.o中 “std::uu 1::basic_ostream::sentry::sentry(std::u 1::basic_ostream&)”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_1::basic_ostream::sentry::~sentry()”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “标准::_1::cout”,引用自: _endian0-654ab7.o中的主管道 “std::_1::ctype::id”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_1::locale::~locale()”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_u1::ios_base::_set_badbit_和_consupt_rethrow()”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::_1::ios_base::clear(unsigned int)”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “std::terminate()”,引用自: ___叮当声呼叫终止于endian0-654ab7.o “\uuuuuuuucxa\u begin\u catch”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 ___叮当声呼叫终止于endian0-654ab7.o “\uuuuuuuucxa\u end\u catch”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 “\uuuuuuugxx\u个性\u v0”,引用自: std::uu 1::basic_ostream&std:u 1::u put_character_序列(std:u 1::basic_ostream&,char const*,unsigned long)在endian0-654ab7.o中 std::uu 1::ostreambuf_迭代器std:u 1::u pad_和_输出(std::u 1::ostreambuf_迭代器,char const*,char const*,char const*,std:u 1::ios_base&,char)在endian0-654ab7.o中 endian0-654ab7.o中的侏儒异常展开信息(uu eh_帧) ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用) 以下是节目:

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    cout<< "hello world";
    return 0;
}
#包括
使用名称空间std;
int main(int argc,char*argv[])
{

CUT

看起来像是丢失了(链接不到)C++运行库。当你没有显示你用来编译和链接程序的命令行时,应该这样做:

$ clang++ -o hello hello.cpp

<>你也可以试试这个。这是用来把库链接到链接器的。这里是C++运行时库。

clang -l c++ -o hello hello.cpp
我更喜欢使用clang++。


-l标志不会改变标准一致性,它用于 指定链接哪些库。这里-L C++表示LBC++链接。 无论何时您需要libstdc++库,它都不会工作 必须使用-l stdc++。因此,使用 Calang++将管理C++所需的所有系统库。
如何构建程序?我使用下面的代码> Gcc-O EndidiEndia0.CPP<代码>,如我通常在LuuxAs中使用的TROANGOFE,尝试CLAN+++。我使用命令<代码> GCC-O EndidiEndia0.CPP<代码>,但是为什么编译器没有检测到它是C++文件?@ Hauly它是这样做的,问题是,当你没有使用<代码> G++< /C> >它不知道包括TH。E+C++运行时库。我记得读<代码> G++只是Mac上的代码< CLAN+++ >代码的前端,所以这可能是答案。“我更喜欢”。如果你可以用一些事实来代替为什么它是更好的选择。-L标志不改变标准一致性,它用来指定要链接的库。这里-L C++表示LBC+++链接。每当你需要LIbSTDc++库时,它就不起作用。更好的做法是使用CLAN+++,它将管理C++所需的所有系统库。