簡體   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