问题标签 [gcc4]
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 - 为什么 gcc4 不展开这个循环?
在gcc 4.4.6
文档中指出:
我正在编译这段代码:
...一次有funroll-all-loops
优化,一次没有:
然后我diff
用来比较每个的汇编代码(使用生成-S -fverbose-asm
)。
生成的代码是相同的。
尝试将循环更改为 a do while
; 调整循环计数器(最多 100 个);更改循环体内的语句。
我会错过什么?为什么这个循环没有展开?
更新
Nikos C--param max-unroll-times=N
建议使用其中 N 是上限来提高循环注册参数。虽然这是一个明智的建议,但它并没有改变行为。我还将循环迭代降低到只有 10 次。还更新了代码以实际“做”某事,没有任何变化。
cygwin - 如何使 OpenMP 在 Cygwin 下与 MinGW-64 一起工作?
情景
我正在使用 C99 ANSI C 开发一个使用OpenMP和GMP的应用程序。它的自然栖息地将是具有大量内核的 linux 机器,所以那里基本上没有什么大问题,但由于我不想在这里讨论的原因,我必须在 64 位 Windows 机器上在 Cygwin 下开发。
当我使用 32 位版本的 gcc 时,某处出现了可怕的错误,并且应用程序比非常粗糙的单线程版本慢了大约 60 倍,而实际上它应该比 CPU 的数量更快. 它使工作变得不可能。我真的不知道是什么原因造成的;无论如何,我已经决定改用 64 位版本的 MinGW,x86_64-w64-mingw32-gcc-4.5.3
确切地说是和他的朋友。
附注:我确信减速不是我的多线程中的缺陷,多线程应用程序在 linux 机器上工作正常且速度更快。
实际问题
设置 GMP 很容易,它可以从源代码编译而没有任何麻烦,然后就像一个魅力一样工作。编译下面的简单示例-fopenmp
也很有魅力:
但是,执行它给了我
我知道这个问题,但我想在不下载任何二进制文件的情况下完成这项工作,而不是从官方 Cygwin 存储库下载任何二进制文件。由于我的示例是使用-fopenmp
switch 编译的,我相信这也应该是很有可能的。
有人可以帮我吗?提前感谢一堆。
c++ - typedef - 原始类型到原始类型
将原始类型的typedef转换为另一种原始类型是否有效?
在 VS 2012 上,发出警告但编译正常。
警告 C4091:“typedef”:当没有声明变量时,“long”左侧被忽略
但是在 gcc-4.3.4 上,它失败了。
错误:声明没有声明任何东西。
哪个编译器符合标准?
PS:我不会在生产代码中写这样的东西。只是想出了想法和检查。
c++ - G++ 4.5.0 中的 std::forward_as_tuple
我对该功能有迫切的需求std::forward_as_tuple
,但仅限于使用 GCC 4.5.0(我知道这是一个糟糕的情况,但它会为我解决很多问题,所以请保持尖刻的言论最低限度)。标<tuple>
头似乎不包含该功能(应该如此),所以我的问题是:
- 它是否隐藏在其他标题中?(这种情况以前发生过,但很难确定。)
- 是否可以推出自己的实现?那就是:它是否可以用在 GCC 4.5.0中实现的 c++11 的部分来实现?如果有人真的知道如何做到这一点,那么奖金。
linux - 对升级 gcc 或 binutils 的影响
我想用 Red Hat Enterprise Linux 5.8 编译,gcc 是 4.1.2。但是愚蠢需要 gcc >=4.6。所以我需要将 gcc 升级到 4.6,也许是 binutils 等。如果新的工具链生成诸如 *.a *.so 之类的二进制文件,在旧的 Red Hat Enterprise Linux 5.8 上运行它们会带来任何问题或不稳定吗?
c++ - g++ 警告:永远不会被执行
继承了一个 C++ 项目。我正在通过 makefile 使用 gcc 4.1.2 在 RHEL 5.5 中构建。该项目很大(数百个文件),总的来说代码非常好。但是,在编译过程中,我经常收到一条 GCC 警告,上面写着:
它没有给我错误源自的源文件或行号。我要冒昧地说 GCC 的标头很好,所以这里发生了什么?我以前从未遇到过这个特别的警告。
c++ - BOOST_STATIC_ASSERT 不在 gcc 4.2 上编译,而在 3.4.6 上编译
我正在移植项目以使用 4.2 与 3.4.6 进行编译
在 gcc 4.2 中编译以下代码时出现错误,而它在 gcc3.4.6 中工作正常
我尝试使用 BOOST_MPL_ASSERT 但没有成功。
导致错误的代码行
c - 指向不透明结构数组的指针
我对 gcc 4.3 有一个奇怪的问题,我想知道这是编译器的特定问题还是一般的 C 问题。诚然,我使用了一个非常奇怪的结构,但我喜欢它,因为它允许我执行一些原本不可能的规则。该项目分为几个模块,每个模块都有一个不透明的结构。标头中有一个typedef struct <tag> <type>
声明,在 1 c 文件中,有一个 astruct tag { ... };
和所有函数通过 a 引用一个元素<type> *
。
每个模块都知道自己的结构,其他模块的结构是不可见的。在一个模块中,我不使用 1 个元素,而是使用固定的元素数组。这意味着该模块的某些函数使用指向数组的指针。我们称之为模块wdi
。所以我有例如
并用于分配(我知道非常不寻常的语法)直接返回指向数组的右指针。
这在 GNU-C 3.4.6 (Solaris SPARC) 下运行良好,在 cc 下,它也编译了 sun 编译器 v12(但由于应用程序的另一部分中断,无法对其进行测试)。但是在 gcc 4.3.3(也在 4.4.6 x86-64 和 4.6.2 ARM 上测试过)上,它没有。我得到编译错误array type has incomplete element type
。我不明白为什么编译器在那个阶段需要这些信息。它也不需要其他不透明结构的大小。
它是一个 gcc 错误吗?
标准是怎么说的?
我找不到关于它的东西。我应该向 GNU 提交错误报告吗?
linux - 在 Linux 上构建 FBX SDK
试图获得在 Ubuntu 12.04 上编译的示例之一
我在用着
make -f Makefile-x64-static
但是,我得到了错误
make: gcc4: Command not found
我尝试在 makefile 中从 gcc4 切换到 gcc。
但是,我得到编译错误
note: #pragma message: IMPORTANT NOTE: The FBX SDK API changed substantially. Please define FBXSDK_NEW_API in your project and fix compilation errors as instructed in fbxsdk_compatibility.h.
和链接错误
/usr/bin/ld: cannot find -luuid
任何提示将不胜感激。