問題:
我在 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中文網其他相關文章!