在amd64上编译gcc,以便在i686上运行,目标是mips

在amd64上编译gcc,以便在i686上运行,目标是mips,gcc,cross-compiling,x86-64,configure,autoconf,Gcc,Cross Compiling,X86 64,Configure,Autoconf,我想为MIPS目标编译gcc和binutils。我在64位amd64机器上工作。想要获得能够在i686而不是amd64体系结构上运行的二进制文件吗?我应该如何配置和构建gcc 如果我将-host=i686linux-gnu添加到./configure脚本,那么它会抱怨缺少i686xxxx工具 如果我添加CFLAGS=-m32,那么我可以构建binutils,但不能构建gcc,因为出现以下错误: g++ -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE

我想为MIPS目标编译gcc和binutils。我在64位amd64机器上工作。想要获得能够在i686而不是amd64体系结构上运行的二进制文件吗?我应该如何配置和构建gcc

如果我将-host=i686linux-gnu添加到./configure脚本,那么它会抱怨缺少i686xxxx工具

如果我添加CFLAGS=-m32,那么我可以构建binutils,但不能构建gcc,因为出现以下错误:

 g++   -g -O2 -DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE  -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H -DGENERATOR_FILE -static-libstdc++ -static-libgcc  -o build/genconstants \
build/genconstants.o build/read-md.o build/errors.o ../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a
/usr/bin/ld: i386 architecture of input file `../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a(concat.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `../build-x86_64-unknown-linux-gnu/libiberty/libiberty.a(fopen_unlocked.o)' is incompatible with i386:x86-64 output
...

我找到了解决方案,需要在make命令行中传递以下环境变量:

CC="gcc -m32" CXX="g++ -m32" LDFLAGS=-m32
就这些。出口CFLAG将不起作用。您需要导出CFLAGS、CXXFLAGS和LDFLAGS,但这里几乎没有陷阱:

CFLAGS=-m32还将导出到MIPS编译器,该编译器在构建libgcc时不知道-m32标志失败; CXXFLAGS=-m32对gcc使用的库有影响,配置脚本失败; 您可以使用所有的\u cflag,但它不适用于gcc本身和libcpp。
另请参阅类似的问题:

看起来我忘记了第二个标志:CXXFLAG=-m32。所以,我需要两个:CFLAGS=-m32和cxflags=-m32。但现在我遇到了以下错误:检查对象文件的后缀。。。配置:错误:在…/gcc-4.9.4/build/mips/libgcc中:配置:错误:无法计算对象文件的后缀:无法编译有关详细信息,请参阅“config.log”。常见问题解答指出,config.log可能包含错误,但除了gcc-V-错误选项之外,我找不到任何其他选项。已找到,我在当前的debian for i386中没有libisl-0.18版本0.15,但gcc要求0.15。在gcc目录中调用下载\u先决条件stript后,进程开始。。。但再次声明:configure:error:cannotcompute对象文件的后缀:cannotcompileinlibgcc。我不知道,我应该在config.log中找到它。我很好奇为什么你要制作以MIPS为目标的i386二进制文件。为什么不是针对MIPS的普通x86-64二进制文件?您是否有一些老掉牙的32位x86机器想用于MIPS交叉开发,但不想在该主机上使用C编译器?是的,我想为32位机器编译可再发行的包。唯一的方法是使用虚拟机或pbuilder?