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

时间:2018-05-15 17:59:41

标签: gcc cross-compiling x86-64 configure autoconf

我想为MIPS目标编译gcc和binutils。我正在使用64位(amd64)机器。并且想获得能够在i686(而不是amd64)arhitecture上运行的二进制文件?我该如何配置和构建gcc?

如果我将.host = i686-linux-gnu添加到./configure脚本中,那么它会因缺少i686-xxxx工具而抱怨。

如果我要添加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
...

1 个答案:

答案 0 :(得分:1)

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

CC="gcc -m32" CXX="g++ -m32" LDFLAGS=-m32

多数民众赞成。输出CFLAGS不起作用。你需要导出CFLAGS,CXXFLAGS和LDFLAGS,但这里几乎没有陷阱:

  1. CFLAGS = -m32也将导出到MIPS编译器,它不了解-m32标志(构建libgcc时失败);
  2. CXXFLAGS = -m32对gcc使用的库有影响,配置脚本失败;
  3. 您可以使用ALL_CFLAGS,但它不适用于gcc本身和libcpp。
  4. 另见类似问题:Building 32 bit GCC from source on 64 bit: linking issue