非法指令 CMOVE - 为 i586 编译

Illegal instruction CMOVE - Compile for i586

我有一台 x86_64 机器,想为一台有 i586 arch 的机器编译。

我安装了:libc6-dev-x32libc6-dev:i386

然后我尝试像这样编译一个简单的 hello world:

gcc -m32 -march=i586 -mcpu=i586 test.c -o test -static

它在我的机器上工作,但在目标上我在 CMOVE 指令上遇到非法指令错误。所以他不知道CMOVE.

我该如何解决这个问题?

快速检查 debian/jessie 和命令

objdump -D /lib32/libc-2.19.so | grep cmove

显示那里有 cmove 指令。 wikipedia 提到它们是为 Pentium pro 添加的。

据此blog

Sept. 2014 update: GCC and other dev tools are now part of the official linux image you can download from Intel Developer Zone.

应该有可用的东西 IoT installers page or Software Downloads for Boards and Kits

构建交叉编译器工具集可能是另一种选择。

你静态地 link 对抗你主机系统的 glibc,它使用了 CMOV* 指令。所以编译器开关无济于事。

一个选择是 link 反对 dietlibc:

  • 安装包dietlibc-dev:i386

  • Link反对:diet gcc -m32 -march=i586 -mcpu=i586 test.c -o test -static

现在您的二进制文件不应包含违规指令。