非法指令 CMOVE - 为 i586 编译
Illegal instruction CMOVE - Compile for i586
我有一台 x86_64 机器,想为一台有 i586 arch 的机器编译。
我安装了:libc6-dev-x32
和 libc6-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
现在您的二进制文件不应包含违规指令。
我有一台 x86_64 机器,想为一台有 i586 arch 的机器编译。
我安装了:libc6-dev-x32
和 libc6-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
现在您的二进制文件不应包含违规指令。