架构x86_64的未定义符号:我应该使用哪种架构?

osk*_*kob 40 c++ macos

我正在尝试用C++做一些非常简单的东西,但我找不到任何关于如何解决这个问题的信息.即使是我刚刚写的那本书"只需编译并运行程序".

TEST.CPP

#include <iostream> 
using namespace std;

int main() 
{ 
    cout << "Never fear, C++ is here!"; 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器说:

Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in ccVfJHGs.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 ccVfJHGs.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in ccVfJHGs.o
  "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in ccVfJHGs.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我试图像标志编译-arch i386-m32,但它总是说,这是错误的架构.我应该使用哪一个?

我在Mac上做这个但不使用XCode,只是gcc.

Som*_*ude 77

错误不是它是错误的架构,而是std::cout(和其他符号)没有定义.

你应该编译和链接与g++gcc,自动与正确的C++库链接.

  • `g ++`将`-lstdc ++`传递给链接器,`gcc`没有,这是唯一的区别. (10认同)
  • @oskob不,这只是因为gcc是C编译器(虽然它处理C++语法),而g ++是C++编译器. (2认同)

mos*_*ear 5

导致该错误是因为您正在编译gcc,只有默认链接libc.你需要编译,g++以便libstdc++自动链接.