gcc 4.6.3 带来了新的特性,特别是 -Ofast 开关很是猥亵。昨晚将 gcc 升级到了 4.6.3,俺也第一时间尝试了 -Ofast

今早,心里不踏实,起来尝试将一些库重编译下,譬如 sqlite3,哈哈,问题果然出现。

sqlite3.c: In function 'sqlite3IsNaN':
sqlite3.c:21153:3: error: #error SQLite will not work correctly with the -ffast-math option of GCC.
make: *** [sqlite3.lo] Error 1
make: *** Waiting for unfinished jobs....

什么意思呢,-Ofast 开关等同于 -O3 -ffast-math,只是呢,-ffast-match 打开后 sqlite3.c 就编译不过去了,呵呵

在gentoo中的解决办法:

CFLAGS="-march=native -O3 -pipe" emerge -av dev-db/sqlite

当然也可以直接 hack 下 ebuild 文件

修改下 src_configure function,添加

replace-flags “-Ofast” "-O3"

-Ofast 还是太激进了…以后遇到同类情况,同样处理即可