【问题标题】:gcc giving garbage on c++ 11 compilation [closed]gcc在c ++ 11编译时提供垃圾[关闭]
【发布时间】:2014-09-10 06:05:11
【问题描述】:

我敢打赌这个问题的解决方案非常简单,但我想知道为什么我不能让 gcc 编译我的 c++ 11 代码。

编辑:删除代码以简化问题。任何程序都会复制同样的错误。

我正在使用 gcc 编译器 4.7,如下所示:https://code.google.com/p/mingw-builds/downloads/detail?name=x86_64-mingw32-gcc-4.7.0-release-c%2Cc%2B%2B%2Cfortran-sjlj.zip&can=2&q=

我用来编译的命令就是gcc Swamp.cpp -std=c++11。如果我使用 gcc Swamp.cpp 编译,代码只会抱怨 c++ 11 的内容。

在我看来,编译给出的错误是垃圾:

 C:\Users\Owner\Documents\GitHub\CompetitiveProgramming\TestProject\CodeProject>gcc Swamp.cpp -std=c++11
 C:\Users\Owner\AppData\Local\Temp\ccRKn67x.o:Swamp.cpp:(.text+0x67): undefined reference to `__gxx_personality_sj0'
 C:\Users\Owner\AppData\Local\Temp\ccRKn67x.o:Swamp.cpp:(.text+0x30e): undefined reference to `__gxx_personality_sj0'
 C:\Users\Owner\AppData\Local\Temp\ccRKn67x.o:Swamp.cpp:(.text+0x72e): undefined reference to `__gxx_personality_sj0'
 C:\Users\Owner\AppData\Local\Temp\ccRKn67x.o:Swamp.cpp:(.text+0x78a): undefined reference to `std::cout'
 …etc…

【问题讨论】:

  • 在 c++ 代码中使用 g++
  • “barf”不是一个技术术语。
  • 你还把一大堆不相关的错误称为什么。酒吧。
  • 顺便说一下,不要使用while (!someStream.eof()),它不会像你期望的那样工作,因为eofbit标志直到之后才设置你有试图读取超出文件末尾的内容。而是使用例如while (std::getline(...)).
  • 他们看起来都跟我很亲近。

标签: c++ gcc c++11


【解决方案1】:

使用 GCC 编译 C++ 代码有两种不同的命令,gccg++。区别实际上只是 g++ 自动链接到 C++ 运行时库,而 gcc 没有。

这些错误都与 GCC C++ 运行时库中缺少符号有关,与您使用的 C++11 功能无关。要修复错误,您需要自己手动链接 C++ 运行时库,或者使用g++ 命令自动处理。

【讨论】:

  • 是的,不知道为什么我忘记/没有尝试 g++。有用。谢谢!
  • 所以这是一个更大的问题......代码通过命令行产生的输出与通过 Visual Studio 产生的输出不同。任何想法可能是什么问题?
  • @BryceSandlund 使用调试器逐步检查代码以找出答案。
  • 我不确定如何通过命令行使用调试器。当我通过 Visual Studio 进行调试时,它的功能完全符合我的预期。
  • @BryceSandlund 您可能希望在使用 GCC 编译时添加标志 -Wall -Wextra -pedantic,这将启用相当多的警告选项。代码中的警告通常表明您做了不应该做的事情,可能会导致未定义的行为。另外,在对向量进行索引时,是否检查索引是否有效?
猜你喜欢
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 2012-09-01
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多