Gcc 4.6.3 打开 Ofast 后
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
还是太激进了…以后遇到同类情况,同样处理即可