【发布时间】:2016-02-01 03:43:20
【问题描述】:
我有一台 x86_64 机器,想为一台具有 i586 架构的机器进行编译。
我安装了:libc6-dev-x32 和 libc6-dev:i386
然后我尝试像这样编译一个简单的hello world:
gcc -m32 -march=i586 -mcpu=i586 test.c -o test -static
它在我的机器上工作,但在目标上,我在CMOVE 指令上收到非法指令错误。所以他不知道CMOVE。
我该如何解决这个问题?
【问题讨论】:
-
如果我没记错的话,cmov 是在 i686 中引入的。您需要跟踪代码的哪一部分是使用 i686 假设编译的。
-
这只是一个你好世界。那么它可能在那里呢?我不能告诉 gcc 不要使用 cmove 吗?
-
我的猜测是:libc 在某处使用了 cmove 指令,并且由于您静态链接构建系统的 libc,因此它也在目标系统中使用。省略
-static有帮助吗? -
另一件事:我的发行版(debian jessie)提供了一个包“libc6-dev-i386”,它应该有助于链接到那个版本的glibc。
标签: c compilation cross-compiling i386