问题标签 [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.
c++ - g++-5.1.1 仅在使用优化标志时警告未使用的变量
在一个大型项目中,只有在构建发布版本(使用优化标志)时,我才从 g++-5.1.1 收到一些编译器警告,但在构建调试版本(禁用大多数编译器优化)时却没有。我已将问题缩小到下面列出的最小示例,其中包含重现问题的命令。如果我使用 g++-4.8.4,则不会出现此问题。这是 g++-5.1.1 中的错误吗?或者,这段代码是否在做一些合法错误的事情并需要发出警告?为什么它不会对代码中列出的最后三种情况产生任何警告(请参阅底部的编辑以获取一些解释)?
对于那些感兴趣的人,这里是 GCC 的 Bugzilla 中的错误报告。
编辑:正如 Ryan Haining 在评论中提到的,container_2
将container_3
有extern
链接,编译器无法警告它们的使用。
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) 。
c++ - 未初始化的向量指针不为 NULL
在我将代码从纯 Windows 平台引入 GNU 编译器的工作期间,我注意到一些奇怪的行为,即未初始化的向量指针。
对应的代码如下所示:
标记线让我很难过。声明我的向量后,当我在 Windows 机器上编译它时它为 NULL。在使用 GNU Compiler 将代码移动到我的 Mac 之后(我正在编译) g++-5
,-std=c++11
我的向量在声明后似乎不再为 NULL。标记的行被跳过。
这是一个 c++ 标准实现问题还是这个奇怪的行为来自哪里?
gcc - g++ 忽略无法识别的命令选项
g++ 不允许我使用无法识别的命令行选项构建包
我需要 g++ 来允许这个无法识别的命令行选项。这可能吗?
编辑
这可能使用自制 g++-5 吗?
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()
它工作得很好。如果可能的话,只有我希望避免额外的字符串副本......
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)
期待任何提示
干杯
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。