gpt4 book ai didi

c++ - GCC 链接器找不到标准库?

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:07 24 4
gpt4 key购买 nike

我一直在用 XCode 开发一个学校项目。最终产品必须以带有 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 symbol ”错误。

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

知道会发生什么吗?

编辑:

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

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

最佳答案

要链接C++代码,您需要使用g++命令,而不是gcc命令。

编译时,gcc 命令知道它正在编译 C++ 代码,因为 .cpp 后缀(但最好使用 g++ 命令)。

链接时,gcc 命令只会看到一堆 .o 文件。 g++ 命令与 gcc 命令的不同之处在于它知道在哪里可以找到特定于 C++ 的库。

(名称 gcc 既指通常用于编译 C 代码的命令,又指整个“GNU 编译器集合”,这可能有点令人困惑。)

关于c++ - GCC 链接器找不到标准库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42472912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com