【发布时间】:2017-11-26 09:08:45
【问题描述】:
gcc 5.4.0 赛格温 2.8.0 Win10
我一直在琢磨这个问题。当我编译一个简单的程序时,见下文,我在一个 gcc 包含文件中遇到错误。我检查了 cygwin 邮件列表,没有人报告 gcc 下载中的错误,所以我认为这是我的误解,但我不知道我做错了什么。在此之前,所有 gcc 包含文件都是自动包含的。哦,其他库的编译是正确的。
代码是:
gcc -std=c++11 test.cpp 或 gcc test.cpp
包括 iostream
使用命名空间标准;
int main(int argc, char** argv) { }
错误信息是:
/tmp/ccfBvaqg.o:test.cpp:(.text+0x44): 未定义引用
std::ios_base::Init::Init()' /tmp/ccfBvaqg.o:test.cpp:(.text+0x44): relocation truncated to fit: R_X86_64_PC32 against undefined symbolstd::ios_base::Init::Init()'/tmp/ccfBvaqg.o:test.cpp:(.rdata$.refptr._ZNSt8ios_base4InitD1Ev[.refptr._ZNSt8ios_base4InitD1Ev]+0x0): 未定义引用`std::ios_base::Init::~Init()'
【问题讨论】:
-
与包含文件无关,是链接错误。事实上,您没有链接到标准 c++ 库 (-lstdc++)。
-
那不是有效的代码。 C++ 代码不以
gcc -std开头,include前面有一个井号(井号),文件名包含在<>中。此外,这是重复的,如果您在发布前在这里搜索 undefined reference 就会知道这一点。 (顺便说一句,代码不是用块引号格式化的;它被格式化为代码。选择它并按键盘上的 Ctrl+K 或单击工具栏上的 {} 按钮。)