質問:
macOS で基本的な C プログラムをコンパイルするとエラーが発生しますライオン。
コード:
#include <iostream> using namespace std; int main(int argc, char *argv[]) { for (int i = 0; i < 10; i++) { cout << "hi"; cout << endl; } return 0; }
コンパイルコマンド:
cc main.cpp
エラー:
Undefined symbols for architecture x86_64: "std::cout", referenced from: _main in ccBdbc76.o "std::basic_ostream<char, std::char_traits<char> > & std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &, char const*)", referenced from: _main in ccBdbc76.o "std::basic_ostream<char, std::char_traits<char> > & std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &)", referenced from: _main in ccBdbc76.o "std::basic_ostream<char, std::char_traits<char> >::operator<< (std::basic_ostream<char, std::char_traits<char> > & (*)(std::basic_ostream<char, std::char_traits<char> > &))", referenced from: _main in ccBdbc76.o "std::ios_base::Init::Init()", referenced from: __static_initialization_and_destruction_0(int, int)in ccBdbc76.o "std::ios_base::Init::~Init()", referenced from: ___tcf_0 in ccBdbc76.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status
答え:
通常、このタイプのエラーはC コードが C フロントエンドを使用してコンパイルされるときに発生します。 C コンパイラはファイルを C として理解してコンパイルしますが、C ライブラリへの参照が欠落しているため、リンク中に失敗します。この問題を解決するには、代わりに C コンパイラを使用していることを確認してください。コードをコンパイルするときに、cc を g または clang に置き換えます。
g++ main.cpp clang++ main.cpp
正しい C コンパイラを使用すると、コードが必要なライブラリにリンクされ、未定義のシンボル エラーが解決されます。
以上がmacOS で単純な C コードをコンパイルすると「未定義シンボル」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。