我正在尝试通过GCC和文本文件学习一些C ++“老式方式”。我遇到了这个问题:
#include <string>
int main(int arcg, char* argv[])
{
std::string test = "test";
}
运行gcc main.cpp
时出现此错误:
/tmp/ccQ34IRS.o: In function `main':
main.cpp:(.text+0x27): undefined reference to `std::allocator<char>::allocator()'
main.cpp:(.text+0x3e): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
main.cpp:(.text+0x4a): undefined reference to `std::allocator<char>::~allocator()'
main.cpp:(.text+0x56): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
main.cpp:(.text+0x7b): undefined reference to `std::allocator<char>::~allocator()'
/tmp/ccQ34IRS.o:(.data.rel.local.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
如果我删除了std::string
行,使得main为空,那么GCC会对其进行编译。搜索错误导致我进入this SO question,但是添加#define _GLIBCXX_USE_CXX11_ABI 0
并没有帮助。
$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
编辑:好的,您应该使用g++
来编译C ++代码,但是gcc
也可以做到吗?这是否意味着这个问题有多个值得讨论的解决方案,不应该关闭吗?而且,如果真的经常问到这个问题,为什么在询问时没有可以链接的公开副本?