Questions tagged «gcc»

GCC是GNU编译器集合。它是Linux上针对C,C ++,Go,Fortran和Ada的事实上的标准编译器,并且还支持许多其他语言和平台。除编译器外,GCC还具有一个工具链(libc,libstdc ++,objdump,nm等),该工具链已在多个平台和系统上广泛使用。

12
GCC为什么不将a * a * a * a * a * a优化为(a * a * a)*(a * a * a)?
我正在对科学应用程序进行一些数值优化。我注意到的一件事是,GCC将pow(a,2)通过将其编译为来优化该调用a*a,但是该调用pow(a,6)并未进行优化,实际上将调用该库函数pow,这大大降低了性能。(相反,可执行文件Intel C ++编译器icc将消除对的库调用pow(a,6)。) 我很好奇的是,当我替换pow(a,6)为a*a*a*a*a*a使用GCC 4.5.1和选项“ -O3 -lm -funroll-loops -msse4”时,它使用5 mulsd条指令: movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 而如果我写(a*a*a)*(a*a*a),它将产生 movapd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm14, %xmm13 mulsd %xmm13, %xmm13 这将乘法指令的数量减少到3. icc具有相似的行为。 为什么编译器无法识别此优化技巧?

23
编译用于高放射性环境的应用程序
我们正在编译一个嵌入式C / C ++应用程序,该应用程序部署在受到电离辐射轰击的环境中的屏蔽设备中。我们正在使用GCC并为ARM进行交叉编译。部署后,我们的应用程序会生成一些错误数据,并且崩溃的次数比我们想要的要多。硬件是为此环境设计的,我们的应用程序已在该平台上运行了几年。 我们是否可以对代码进行更改,或者可以进行编译时改进以识别/纠正由单个事件引发的软错误和内存损坏?其他开发人员是否在减少软错误对长期运行的应用程序的有害影响方面取得了成功?
1456 c++  c  gcc  embedded  fault-tolerance 

27
致命错误:Python.h:没有这样的文件或目录
我正在尝试使用C扩展文件构建共享库,但首先我必须使用以下命令生成输出文件: gcc -Wall utilsmodule.c -o Utilc 执行命令后,我得到以下错误消息: utilsmodule.c:1:20:致命错误:Python.h:没有此类文件或目录编译终止。 我已经尝试了所有建议的解决方案,但是仍然存在该问题。我没有问题Python.h。我设法在机器上找到该文件。
1189 python  gcc  python-c-api 

5
为什么C预处理程序将单词“ linux”解释为常量“ 1”?
为什么GCC中的C预处理器将单词(小写字母)解释为常量?linux1 test.c: #include <stdio.h> int main(void) { int linux = 5; return 0; } 的结果$ gcc -E test.c(在预处理阶段之后停止): .... int main(void) { int 1 = 5; return 0; } 当然哪个会产生错误。 (顺便说一句:没有#define linux中stdio.h的文件。)
1022 c  linux  gcc  c-preprocessor 


2
当正好遍历8192个元素时,为什么我的程序运行缓慢?
这是有问题的程序的摘录。矩阵img[][]的大小为SIZE×SIZE,并初始化为: img[j][i] = 2 * j + i 然后,创建一个矩阵res[][],并将此处的每个字段作为img矩阵中周围9个字段的平均值。为简单起见,边框保留为0。 for(i=1;i<SIZE-1;i++) for(j=1;j<SIZE-1;j++) { res[j][i]=0; for(k=-1;k<2;k++) for(l=-1;l<2;l++) res[j][i] += img[j+l][i+k]; res[j][i] /= 9; } 这就是程序的全部内容。为了完整起见,这是之前的内容。之后没有代码。如您所见,这只是初始化。 #define SIZE 8192 float img[SIZE][SIZE]; // input image float res[SIZE][SIZE]; //result of mean filter int i,j,k,l; for(i=0;i<SIZE;i++) for(j=0;j<SIZE;j++) img[j][i] = (2*j+i)%8196; 基本上,当SIZE为2048的倍数时,该程序运行缓慢,例如执行时间: SIZE = 8191: 3.44 secs …

28
我的程序崩溃时如何自动生成stacktrace
我正在使用GCC编译器在Linux上工作。当我的C ++程序崩溃时,我希望它自动生成一个堆栈跟踪。 我的程序由许多不同的用户运行,并且还可以在Linux,Windows和Macintosh上运行(所有版本都使用进行编译gcc)。 我希望我的程序能够在崩溃时生成堆栈跟踪,并在用户下次运行时生成一个堆栈跟踪,它将询问他们是否可以将堆栈跟踪发送给我,这样我就可以找到问题所在。我可以处理向我发送信息,但是我不知道如何生成跟踪字符串。有任何想法吗?
590 c++  gcc  crash  stack-trace  assert 




6
如果我针对大小而不是速度进行优化,为什么GCC会生成15-20%的更快代码?
我在2009年首先注意到,如果我对大小(-Os)而不是速度(-O2或-O3)进行优化,那么GCC(至少在我的项目和我的机器上)倾向于生成明显更快的代码,而我一直在想为什么。 我设法创建了(相当愚蠢的)代码来显示这种令人惊讶的行为,并且足够小,可以在此处发布。 const int LOOP_BOUND = 200000000; __attribute__((noinline)) static int add(const int& x, const int& y) { return x + y; } __attribute__((noinline)) static int work(int xval, int yval) { int sum(0); for (int i=0; i<LOOP_BOUND; ++i) { int x(xval+sum); int y(yval+sum); int z = add(x, y); sum += z; …

6
GCC -fPIC选项
我已经阅读了GCC的代码生成约定选项,但不了解“生成与位置无关的代码(PIC)”的含义。请举一个例子来解释我的意思。
437 c++  gcc  options  fpic 

5
CMake中的调试与发布
在GCC编译的项目中, 如何为每种目标类型(调试/发布)运行CMake? 如何使用CMake指定调试和发布C / C ++标志? 我如何表示将使用编译主可执行文件g++并使用一个嵌套库gcc?
435 c++  c  gcc  cmake 

23
如何在GCC中摆脱从字符串常量到'char *'的过时转换警告?
因此,我正在开发一个非常大的代码库,最近将其升级到gcc 4.3,现在会触发以下警告: 警告:不建议将字符串常量转换为'char *' 显然,解决此问题的正确方法是找到每个声明,例如 char *s = "constant string"; 或函数调用,例如: void foo(char *s); foo("constant string"); 并使其成为const char指针。但是,这意味着最少要触摸564个文件,这不是我目前希望执行的任务。现在的问题是我正在使用-werror,因此我需要某种方式来抑制这些警告。我怎样才能做到这一点?
409 c++  string  gcc 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.