Tag: gcc4.8

除-Ofast以外的任何内容都会导致“未定义的引用”错误

我有一个包含math.h的C程序,并使用该头文件中的sqrt函数。 非常奇怪的是,当我没有传递-Ofast标志时,我的代码无法编译。 如果我使用以下代码编译我的代码: gcc -std=c99 foo.c 要么本身,要么添加任何-O1 , -O2或-Os (那些是大写的O)到该命令,我得到以下错误: /tmp/ccAcT2Bz.o: In function `sum_of_divisors’: foo.c:(.text+0xb): undefined reference to `sqrt’ collect2: error: ld returned 1 exit status -O3给出了一个类似但更精细的错误(请注意,我不在main调用sqrt ): /tmp/ccBKvvFS.o: In function `sum_of_divisors’: foo.c:(.text+0x5c): undefined reference to `sqrt’ /tmp/ccBKvvFS.o: In function `main’: foo.c:(.text.startup+0xe5): undefined reference to `sqrt’ foo.c:(.text.startup+0xf3): undefined reference to `sqrt’ collect2: error: ld returned […]

GCC循环展开标志真的有效吗?

在C中,我有一个任务,我必须进行乘法,反演,trasposition,add等等,将巨大的矩阵分配为二维数组(数组的数组)。 我找到了gcc标志-funroll-all-loops 。 如果我理解正确,这将自动展开所有循环,而无需程序员的任何努力。 我的问题: a) gcc是否包含这种优化,各种优化标志为-O1 , -O2等? b)我是否必须在代码中使用任何pragma来利用循环展开或自动识别循环? c)如果展开提高了性能,为什么默认情况下不启用此选项? d)以尽可能最好的方式编译程序的推荐gcc优化标志是什么? (我必须运行这个针对单个CPU系列优化的程序,这与我编译代码的机器相同,实际上我使用march=native和-O2标志) 编辑 似乎存在关于使用展开的争议,在某些情况下可能会降低性能。 在我的情况下,有各种方法可以简单地将数学运算嵌套在循环中,以便为大量元素完成迭代矩阵元素。 在这种情况下,展开如何减慢或提高性能?

gcc 4.8.1默认启用sse吗?

我遇到了在不支持SSE4.1的系统上运行我的旧代码的崩溃,我调试了一下并在glibc中找到了SSE指令,这可能吗? 为什么不在gcc 4.8.1发布说明中报告这个?

编译32位时出现__int128错误

c:\…random.h|106|error: expected unqualified-id before ‘__int128’ 当我编译32位程序时,上面是我得到的错误。 我正在使用http://sourceforge.net/projects/mingwbuilds/ 为什么? 我的代码用4.7.2编译得很好,但我想更新到4.8以修复错误,当没有零时,它会删除0用作指针警告的空值。 我想要的许多错误修复。 它在Windows上编译我的x64就好了。 有没有办法让它编译x32应用程序?

即使使用-g选项,GCC也不会生成行号信息

我从源代码构建并安装了GCC 4.8.1: $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ./configure –disable-multilib Thread model: posix gcc version 4.8.1 (GCC) 我写了一个简单无用的程序: $ cat hw.c #include void foo() { int a; scanf(“%d”, &a); /* So I can press ctrl+c here. */ printf(“Hello world!\n”); } int main() { foo(); } 现在我编译一下: $ gcc -g […]