问题:
我在 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中文网其他相关文章!