C++Hello World:体系结构x86_64的未定义符号

C++ Hello World: Undefined symbols for architecture x86_64

本文关键字:未定义 符号 x86 World 体系结构 C++Hello      更新时间:2023-10-16

当我试图编译一个简单的hello-world代码时,我从gcc 中得到了一些架构错误

$vim test.cpp

#include <iostream>
int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}

$gcc test.cpp-o test.o

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

我的gcc在这里:/usr/local/bin/gcc-

$gcc—版本

gcc (GCC) 4.9.2 20141029 (prerelease)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

系统设置:Mac OSX yosemit 10.10.2GCC来自http://hpc.sourceforge.net/

我最初的gcc 4.2(mac上的默认值)给了我couldn't understand kern.osversion '14.1.0',这就是我选择的原因http://hpc.sourceforge.net/

使用g++而不是gcc。

g++是一个基于*nix的C++编译器。gcc是一个针对C、C++、Objective-C、Fortran、Java、Ada和Go的编译器。使用的库不同。您的代码将使用g++而不是gcc。

您应该使用进行编译

g++ -Wall -Wextra -g  test.cpp -o mytestprog

然后运行./mytestprog并使用gdb对其进行调试

如果该命令不起作用,您可能会在g++之后添加-v(以显示正在发生的情况),这将是您的g++配置或安装错误的症状。当然,做一个which g++,以确保g++是您想要的。

请阅读我关于编译GCC的提示。我相信你得到的二进制文件http://hpc.sourceforge.net/不适合您的操作系统。我建议小心地从其源代码构建、编译和安装GCC(可通过这些镜像下载)。(对新手来说)这可能不是很容易。请确保在源树的外部构建。仔细阅读安装说明