首頁 >後端開發 >C++ >為什麼在 macOS 上編譯簡單 C 程式碼時出現「未定義符號」錯誤?

為什麼在 macOS 上編譯簡單 C 程式碼時出現「未定義符號」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-09 01:43:14566瀏覽

Why Am I Getting

編譯簡單 C 程式碼時出錯

問題:
我在 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> > &amp; std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &amp;, char const*)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> > &amp; std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &amp;)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<< (std::basic_ostream<char, std::char_traits<char> > &amp; (*)(std::basic_ostream<char, std::char_traits<char> > &amp;))", 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn