C++ GCC链接器可以';找不到标准库?
我一直在用XCode开发一个学校项目。最终的产品必须在源代码中提交一个makefile,所以我编写了一个makefile,并以这种方式开始编译,以确保我有一个工作副本。这是我的makefile: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:
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
命令只会看到一堆.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上。总是“每个人都知道”的东西让你进入一个新的环境。