Скомпилируйте gcc на amd64 для работы на i686, а target - mips - PullRequest
0 голосов
/ 15 мая 2018

Я хочу скомпилировать gcc и binutils для цели MIPS. Я работаю на 64-битной (amd64) машине. И хотите получить двоичный файл, который может работать на архитектуре i686 (не amd64)? Как мне настроить и собрать 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 голосов
/ 16 мая 2018

Я нашел решение, необходимо передать следующие переменные окружения в командной строке 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.

См. Также аналогичный вопрос: Сборка 32-битного GCC из источника на 64-битной системе: проблема со связыванием

...