我一直在尝试从源代码编译 gcc 4.x,--with-fpmath=387
但我收到了这个错误:"Invalid --with-fpmath=387"
. 我查看了配置,发现它不支持这个选项(尽管文档仍然提到它是一个可能的选项):
case ${with_fpmath} in
avx)
tm_file="${tm_file} i386/avxmath.h"
;;
sse)
tm_file="${tm_file} i386/ssemath.h"
;;
*)
echo "Invalid --with-fpmath=$with_fpmath" 1>&2
exit 1
基本上,我开始这一切是因为我需要为旧的目标平台提供可执行文件(实际上,它是旧的 Celeron,但没有任何 SSE2 指令,显然由DEFAULT使用 libstdc++ )。可执行文件在来自 libstdc++ 中复制例程的第一条指令 (movq XMM0,...) 处崩溃,并显示“非法指令”消息。有没有办法解决这个问题?我需要使用相当新的 g++ 才能移植我现有的代码库。
我想知道是否可以从旧版本中提供这些标头/源以支持常规 x87 指令,从而不引用 SSE 指令?
更新:请注意我说的是编译后的 libstdc++ 在目标代码中有 SSE2 指令,所以问题不在于 gcc 命令行参数。无论我在编译我的代码时向 gcc 提供什么,它都会与已经具有内置 SSE2 指令的 libstdc++ 链接。
真正的答案是在编译 GCC 时不要使用任何--with-fpmath 开关。我被configure script switch语句弄糊涂了,以为它只支持sse或avx,而事实上,默认值(这个开关中没有提到是“387”)。因此,请确保在运行配置时不要使用 --with-fpmath。我在没有它的情况下重新编译了 GCC,它现在可以正常工作了。
谢谢。