问题标签 [g++5.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
603 浏览

c++ - g++-5.1.1 仅在使用优化标志时警告未使用的变量

在一个大型项目中,只有在构建发布版本(使用优化标志)时,我才从 g++-5.1.1 收到一些编译器警告,但在构建调试版本(禁用大多数编译器优化)时却没有。我已将问题缩小到下面列出的最小示例,其中包含重现问题的命令。如果我使用 g++-4.8.4,则不会出现此问题。这是 g++-5.1.1 中的错误吗?或者,这段代码是否在做一些合法错误的事情并需要发出警告?为什么它不会对代码中列出的最后三种情况产生任何警告(请参阅底部的编辑以获取一些解释)?

对于那些感兴趣的人,这里是 GCC 的 Bugzilla 中的错误报告

编辑:正如 Ryan Haining 在评论中提到的,container_2container_3extern链接,编译器无法警告它们的使用。

0 投票
0 回答
620 浏览

gcc - G++ 5.1 的 `-Wctor-dtor-privacy` 警告是否被破坏?

所有构造函数和析构函数都是 privatector-dtor-privacy时,将触发警告。

因此,对于以下课程,我希望会触发警告:

但是clang++(版本clang 3.7.0 (trunk 238948))和 GCC 5.1.0 在使用-Wctor-dtor-privacy. 这看起来很可疑,但警告并不完美,所以我想会出现一些误报。(也许警告不会被触发,因为复制和移动构造函数仍然是隐式定义的,所以技术上并不是所有的构造函数都是私有的——即使类仍然不能被构造。)

但是,此代码确实收到警告:

在这里,test创建private并删除了显式构造函数,以便foo隐式定义 ' 构造函数。G++ 给出以下警告:

clang++没有警告。

这个警告肯定看起来不正确,因为有一个隐式的公共构造函数。这里发生了什么?这是一个错误吗?

编辑:似乎 Clang++从未发出警告。即使以下类也不会触发任何警告-Wctor-dtor-privacy

所以也许这个警告只是为了 G++ 命令行兼容性而提供的,但实际上什么也没做?(请注意,此类使用 GCC 会生成一个非常明智的警告warning: ‘class ReallyTrulyPrivateOnly’ only defines private constructors and has no friends [-Wctor-dtor-privacy]:)

编辑 2:我相信这个警告的行为没有得到很好的理解或记录,并且这个问题在bug 55813中被注意到和报告。这在 4.8 版中被标记为“已修复”,但由于这种行为对我来说仍然是可疑的,所以我添加了一条指向这个问题的评论。

编辑3:上述编辑中的错误不是同一个问题;我为此问题打开了一个新的错误报告 (71484) 。

0 投票
2 回答
443 浏览

c++ - 未初始化的向量指针不为 NULL

在我将代码从纯 Windows 平台引入 GNU 编译器的工作期间,我注意到一些奇怪的行为,即未初始化的向量指针。

对应的代码如下所示:

标记线让我很难过。声明我的向量后,当我在 Windows 机器上编译它时它为 NULL。在使用 GNU Compiler 将代码移动到我的 Mac 之后(我正在编译) g++-5-std=c++11我的向量在声明后似乎不再为 NULL。标记的行被跳过。

这是一个 c++ 标准实现问题还是这个奇怪的行为来自哪里?

0 投票
1 回答
1075 浏览

gcc - g++ 忽略无法识别的命令选项

g++ 不允许我使用无法识别的命令行选项构建包

我需要 g++ 来允许这个无法识别的命令行选项。这可能吗?

编辑

这可能使用自制 g++-5 吗?

0 投票
1 回答
180 浏览

c++ - c_str() 的生命周期在 g++ 4.8.4 和 g++ 5.3.1 之间是否发生了变化?

我从一个守护进程启动进程,它确保所述进程连续运行并以正确的顺序启动,等等。

在某些时候,我想开始这个过程,execv()所以我为参数准备了一个字符串数组,如下所示:

在大多数情况下,我有大约 10 个这样的论点。

现在,execv()只访问一个裸指针数组。因此,我执行以下操作来创建此类指针的数组:

然后我可以execv()用最后一个数组调用:

这在带有 g++ 4.8.4 的 Ubuntu 14.04 中运行良好,但不知何故,c_str()当我尝试运行使用 g++ 5.3.1 编译的相同代码时,指针会失效。

据我了解,这不应该是因为我没有修改创建裸指针数组的第一个循环和execv()调用之间的字符串。

参考资料说:

从 c_str() 获得的指针可能会通过以下方式失效:

  • 将对字符串的非常量引用传递给任何标准库函数,或
  • 在字符串上调用非常量成员函数,不包括 operator[]、at()、front()、back()、begin()、rbegin()、end() 和 rend()。

PS我已经有一个修复,我现在做了一个stdup()c_str()它工作得很好。如果可能的话,只有我希望避免额外的字符串副本......

0 投票
0 回答
495 浏览

g++ - dce R_X86_64_PLTOFF64 中的重定位错误

我一直在尝试编译直接代码执行(DCE)——网络模拟器 ns-3 的扩展,它可以通过提供假 POSIX 层在模拟器中运行真实程序(VLC、iperf)——自从我升级到 ubuntu 后没有成功谢尼尔。要编译 DCE,首先运行./waf configure,最后构建程序:

我承认我已经没有办法解决这个问题了。升级我的编译器时首先发生: gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2)

更多信息: https ://github.com/direct-code-execution/ns-3-dce/issues/46

这是结果:./waf build -v https ://transfer.sh/tj7uf/temp

https://transfer.sh/qE5Cd/link-step的结果:

(搜索 R_X86_64_PLTOFF64)

期待任何提示

干杯

0 投票
1 回答
195 浏览

c++ - 编译 pre c++98 项目?

试图编译旧的(遗留)cpp 项目。根据https://stackoverflow.com/a/13103121/555493,该项目早于 C++98!

有没有什么方法可以编译这个项目而无需某种类型的(次要)重构?

当我运行该命令g++ -std=c++98 -pedantic -ggdb -c file.cxx时,它会出现错误fatal error: 'iostream.h' file not found

注意:我不是原始代码的作者。迁移到更现代的 C++ 版本可能是不可能的。所以现在,我只是想让它编译。

我在 mac El Capitan 上使用 brew,gcc5。