C++ GCC链接器可以';找不到标准库?

C++ GCC链接器可以';找不到标准库?,c++,linker,c++-standard-library,C++,Linker,C++ Standard Library,我一直在用XCode开发一个学校项目。最终的产品必须在源代码中提交一个makefile,所以我编写了一个makefile,并以这种方式开始编译,以确保我有一个工作副本。这是我的makefile: all: main.o StackList.o world.o Farm.o gcc main.o StackList.o world.o Farm.o -g -o Project1 main.o: gcc -g -c main.cpp StackList.o:

我一直在用XCode开发一个学校项目。最终的产品必须在源代码中提交一个makefile,所以我编写了一个makefile,并以这种方式开始编译,以确保我有一个工作副本。这是我的makefile:

all: main.o StackList.o world.o Farm.o
        gcc main.o StackList.o world.o Farm.o -g -o Project1

main.o:
        gcc -g -c main.cpp

StackList.o:
        gcc -g -c Stacklist.cpp

world.cpp:
        gcc -g -c world.cpp

Farm.cpp:
        gcc -g -c Farm.cpp

clean:
        rm *.o Project1
编译每个对象文件都可以很好地工作,但是当它进入“全部”链接步骤时,它似乎不知道标准库。从“cin”、“basic_string”到“operator new”,我都会得到“undefined symbols”错误

我的印象是这些事情不需要直接指出,事实上过去也不需要这样做

知道会发生什么吗

编辑:

如果有帮助,下面是(很长)错误消息的开头:

Undefined symbols for architecture x86_64:
  "std::cin", referenced from:
  _main in main.o
  "std::cout", referenced from:
      _main in main.o
      Farm::print(int)  in Farm.o
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
      _main in main.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in main.o
      __static_initialization_and_destruction_0(int, int)in StackList.o
      __static_initialization_and_destruction_0(int, int)in world.o
      __static_initialization_and_destruction_0(int, int)in Farm.o
  "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in main.o
      ___tcf_0 in StackList.o
      ___tcf_0 in world.o
      ___tcf_0 in Farm.o
  "operator new(unsigned long)", referenced from:
      doStackSearch(std::basic_istream<char, std::char_traits<char> >*, std::list<Farm*, std::allocator<Farm*> >*&)in world.o
架构x86_64的未定义符号: “标准::cin”,引用自: _主音中的主音 “std::cout”,引用自: _主音中的主音 Farm::在Farm.o中打印(int)
STD::Basic ToSooS&STD::运算符< P>链接C++代码,需要使用<代码> G++< /C>命令,而不是<代码> GCC 命令。 <>编译时, Gcc命令知道它编译的C++代码是因为<代码> .CPP后缀(但是无论如何使用<代码> G++< /COD>命令是个好主意)。 链接时,
gcc
命令只会看到一堆
.o
文件。
g++
命令不同于
gcc
命令,因为它知道在哪里可以找到特定于C++的库


(名称<代码> GCC < /C> >既指通常用于编译C代码的命令,又称“GNU编译器集合”,它可能有点混乱。

< P>您需要使用<代码> G++<代码>编译和链接C++源代码,而不是<代码> GCC < /C> > 此外,除了第一个和最后一个目标之外,您还可以省去所有目标。
make
已经知道如何将
.cpp
文件编译到
.o
——您不必告诉它如何编译

    gcc main.o StackList.o world.o Farm.o -g -o Project1

<>这个命令行中的C++代码库中链接了什么?没有链接的C++文件。你没有指定语言。你调用编译程序为<代码> GCC < /C> > P/>我知道这是旧的,但是如果你正在编译并连接C++,你可以自己指定标准库。你的命令结束时,LSTDC++<代码>。< P/>对不起,这个愚蠢的问题确实解决了。这只是令人沮丧的,因为我以前使用GCC C++,我的导师告诉我们GCC和G++都会在必要时互相调用,非常感谢。不是愚蠢的问题。我有12年的C++开发经验。朋友,但不是在Linux上。总是“每个人都知道”的东西让你进入一个新的环境。