2016-05-08 6 views
0

MacでC++コードをコンパイルしようとするとこのエラーが発生します。 私はPCでしばらくプログラミングしてきましたが、UNIの作業用のMacラップトップを手に入れました。私は通常 "gcc"を使ってコンパイルしますが、うまくいかないようです。どんな助けもありがとう。それまではコンパイル時に "clang ++"を使用するだけです。私のMacでコンパイルすると、 "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) 
+0

あなたのタイトルは "gccまたはcc"と表示され、あなたの体は "gccまたはg ++"と表示されます。どちらですか?あなたは何をしていますか?私にとっては、Cコンパイラ(例えば 'cc')を使ってC++プログラムをビルドしようとしているため、標準ライブラリの実装が欠落しているようです。 –

+0

タイトルにミスタイプのgcc – MichaelMariani

+0

あなたの例ではまだ「cc」と表示されています。あなたの投稿を気にかけてください... –

答えて

2

gccclangccは(システム上clangへのシンボリックリンクであるように思われた)Cプログラムを構築するためのコマンドです。

g++およびclang++は、C++プログラムをビルドするコマンドです。

CとC++は2つの異なる言語です。

すべてのコマンドは一般的に、あらゆる種類のものを構築できる大規模なコンパイラの「フロントドア」にすぎませんが、入力した実際のコマンドに依存する特定のデフォルトがあります。たとえば、gccまたはccを実行しても、C++標準ライブラリはプログラムにリンクされているライブラリに自動的に追加されません。

のマニュアルを読んでから、正しいコマンドを使用して、ツールチェーンにC++プログラムをビルドしてください。 Clangの場合、それはclang++(あなたが発見したように)です。 GCCでは、それはg++です。

  • も参照してください:Xcodeの、のlibstdC++とのlibC++の両方を出荷するために使用されるリンゴの以前のバージョンではDifference between CC, gcc and g++?
+0

ありがとう、私は最初にC++を起動したときに、g ++やgccのいずれかに指示があったので、同じことをするはずです。それか、私は間違っていると思いました。 – MichaelMariani

+0

@ user3427318:指示が間違っている可能性があります。プログラミング授業の世界でこれは前例のないことではないでしょう。 –

+0

本当ですが、gccを使ってコンパイルしても動作しましたが、\ – MichaelMariani

0

。名前の衝突を防ぐために、libC++のメンテナはstd :: namespaceをstd :: __ 1にエイリアスします。何が起こっている

は、実際にはG ++(のlibstdC++を使用してデフォルト)は(++デフォルトはlibcにする)打ち鳴らすでコンパイルされたライブラリーにリンクされて

は、stdlibC++はまだXcodeのに同梱されますが限りされていることです私はそれが時代遅れだと言うことができます。

混乱していますか?

だから、あなたがやっている正確に何を知っている限り、それはMac上で打ち鳴らす++ですべてをコンパイルするのが最善ですI.

ました。実際、Xcodeのそれ以降のバージョンでは、g ++をclang ++の同義語として扱います。

関連する問題