问题标签 [gcc6]
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 - gcc 无法在没有 -O2 的情况下内联函数
我最近在升级 debian 测试并获得 gcc 6.2.1 编译器后编译一段代码时遇到了问题。我把它归结为这个简单的例子:
该代码无法使用以下内容进行编译:
gcc -o exec code.c # gcc 6.2.1
它失败了:
undefined reference to 'func'
我也在同一台主机上尝试过使用 gcc 4.8、4.9 和 5,但都失败了。如果我添加它会编译:
gcc -o exec code.c -O2 # gcc 6.2.1
我真的很好奇为什么它可以与 -O2 标志一起使用,但并非没有,我希望这可以工作?
doxygen - Doxygen 1.8.11 构建失败并出现 gcc620
我已经看到了 doxygen 所需的所有软件包及其版本,但是使用 gcc620 构建失败并出现以下错误:
请帮忙。
c++ - Why does GCC 6 assume data is 16-byte aligned?
(Sorry in advance for not having managed to reduce my problem to a simple failing test case...)
I have faced issues with upgrading to GCC 6.3.0 to build our codebase (relevant flags: -O3 -m32
).
Specifically, my application segfaults within a struct ctor call because of GCC optimizations.
In this ctor, GCC used movaps
:
movaps
requires the operand to be 16-byte aligned. But at this point in time, %ebx
points to my object, which is not necessarily 16-byte aligned. From glibc :
“The address of a block returned by malloc or realloc in GNU systems is always a multiple of eight (or sixteen on 64-bit systems).“</p>
Hence the segfault (when built with -O3 -m32
).
Why does it seem like GCC assumed the allocated object would be 16-byte aligned ? Am I misunderstanding something ?
Notes:
- No alignment hints or attributes on this struct
- Object has been initialized via default
new
operator - Depends on the level of optimization:
- PASS:
-m32 -O2
- FAIL:
-m32 -O2 -ftree-slp-vectorize
- PASS:
-m32 -O3 -fno-tree-slp-vectorize
- FAIL:
-m32 -O3
- PASS:
This other project, seem to have hit similar issues : https://github.com/godotengine/godot/issues/4623
Their investigation points to -fvect-cost-model=dynamic
. Investigation on my codebase rather points to -ftree-slp-vectorize
.
c++ - gcc 6.1 std::result_of 编译错误
考虑一个小的独立用例,其中我想确定一个类型是完整的还是不完整的
gcc 4.9.3
这与带有--std=c++11
标志的编译很好。但是,使用gcc 6.1
and它会--std=c++11
产生编译错误
我在这里想念什么?有什么可能的解决方法?
c++ - 我可以链接 GCC 5.4.x 和 6.x 从 C++ 编译的对象吗?
出于某种原因,我有一些用 GCC 5.4.x 编译的目标文件和一些用 GCC 6.x 编译的目标文件。源代码是 C++14,我在运行 GNU/Linux 4.4.x 的 x86_64 机器上。
有没有可能将我的对象链接在一起?如果是这样,它可能的限制/条件是什么,或者我需要遵循什么程序才能使它成为可能?
c++ - 在 gcc 中使用 fsanitize 开关的 Boost 问题
我一直在尝试利用一些GCC Instrumentation Options进行运行时检查,以尝试调试/诊断我在 C++ 代码的特定区域中遇到的问题。
为了尝试缩小问题范围,我开始启用其中一些功能,但在我没有预料到的代码区域中遇到了错误——即在 Boost 库中。
当我使用 gcc 开关 '-fsanitize=undefined' 时,我注意到 gdb 报告了许多运行时错误;我似乎能够毫不费力地重现这些错误。我在下面提供了一些示例代码。
环境配置:
- Ubuntu v16.10 (Yakkety) x86_x64
- Boost v1.61(使用 apt-get)
- GCC 6.3.0(最近从源代码构建,但来自 apt-get 的版本出现问题)
- GDB 7.11.90
- CMake v3.7(来自 cmake 网站)
示例代码如下:
CMakefile 看起来像:
GDB 示例输出:
在对我的发现进行了一些思考后,我收集了一些问题:
- 这是编码错误吗?
- 这让你们感到惊讶吗?
- 这些错误是误报吗?
- 你们中有人使用“-fsanitize”开关吗?
- 我应该尝试更新版本的 Boost(即从源代码构建的 v1.63)吗?
- 我可以在我的系统上同时安装 v1.61 和 v1.63(但只能链接到其中一个)吗?
c++ - 错误:reinterpret_cast 从整数到指针
以下代码无法使用 GCC 6 和 32 位模式(在 amd64 主机上)编译。
编译命令:
错误信息是:
它适用于较旧的编译器(GCC 4.9)。它也可以作为内联定义(而不是静态成员变量)或在 64 位模式下编译。
有没有办法让它与 GCC 6 一起工作?
gcc - gcc -fPIC -fPIE:gcc-4 和 gcc-6 之间的区别
序言:这个问题不是关于 Oracle,而是我想了解 gcc-4 和 gcc-6 在处理位置无关代码方面的根本区别。
所以我决定尝试在 Debian 上安装 Oracle 12c。
在与 gcc-6 的链接阶段,会发出如下错误消息:
但是,如果我将编译器切换为使用 gcc-4.9,则所有链接都可以顺利完成。
因此我的2个问题:
- gcc 版本 4 和 6 之间的 -fPIC 和 -fPIE 的默认值是否有变化?很可能是的,版本 6 似乎默认使用 2 个选项。
- 对我来说更重要的是:gcc 版本 6 是否可以选择使用版本 4 的行为来生成与位置无关的代码?(或者我迟早会因为 gcc-4 不再可用而无法链接旧库?)
c++ - Centos6 gcc6:编译简单的c ++ 11测试文件时未拾取默认ABI
我有一个安装了 devtoolset-6 的 centos 6 的 docker 映像,我想使用 中可用的新 ABI 构建我的代码gcc>=5
,在这种情况下gcc6
。不知何故,我没有得到我期望的默认工作。我尝试了各种变化,但我不知道我错过了什么微不足道的事情。
任何我缺少的建议将不胜感激......
在编译下面的示例代码时,我希望看到:
使用 gcc6构建以下内容Dockerfile
会生成一个 centos6 映像:
并运行图像
下面的代码片段没有给出预期的结果
我得到了旧的 ABI 版本,即使 gcc 文档声明默认是生成新的 ABI
即使使用-D_GLIBCXX_USE_CXX11_ABI=1
它显式编译仍然会给出不正确的结果:
所以很明显我错过了一些微不足道的东西。
有什么帮助吗?
c++ - g++:优化 -march=haswell 和更新的变化数值结果
当我注意到 g++ 似乎会根据选择的优化改变结果时,我一直致力于优化性能,当然还进行了回归测试。到目前为止,我认为-O2 -march=[whatever]
无论选择哪种架构,都应该为数值计算产生完全相同的结果。然而,这似乎不是 g++ 的情况。虽然使用一直到 ivybridge 的旧架构产生的结果与 clang 对任何架构的结果相同,但对于 haswell 和更新的 gcc,我得到不同的结果。这是 gcc 中的错误还是我误解了一些关于优化的问题?我真的很吃惊,因为 clang 似乎没有表现出这种行为。
请注意,我很清楚这些差异在机器精度范围内,但它们仍然干扰了我的简单回归检查。
这是一些示例代码:
编译使用:
gcc 版本:6.2.1
铿锵版本:3.8.0
编译为 64 位,在 Intel Skylake 处理器上执行。