Получение GMP для работы с GCC 4.5.2 - PullRequest
2 голосов
/ 01 марта 2011

Я пытаюсь сделать кросс-компилятор с файлами из http://crossgcc.rts -software.org / doku.php? Id = i386linuxgccformac

Я на Intel Mac(10.6.6, x86_64) Я скомпилировал: gmp, mpfr, mpc для кросс-компилятора как 32-битный (как на 64-битном Mac), но я получаю

ld: warning: option -s is obsolete and being ignored
ld: warning: ignoring file /gmp1/lib/libmpc.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file /gmp1/lib/libmpfr.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file /gmp1/lib/libgmp.dylib, file was built for unsupported file format which is not the architecture being linked (i386)

При компиляции GCC с:

--prefix=/usr/local/i386-linux-4.5.2 --target=i386-linux --enable-languages=c --without-headers --disable-shared --disable-threads --disable-nls --with-gmp=/gmp1 --with-gmp-lib=/gmp1 --with-gmp-include=/gmp1 --with-mpfr=/gmp1 --with-mpfr-include=/gmp1 --with-mpfr-lib=/gmp1 --with-mpc=/gmp1 --with-mpc-lib=/gmp1 --with-mpc-include=/gmp1

Кроме того, если я скомпилирую GMP с:

./configure --prefix=/gmp1 --host=i386-linux

, я получу:

configure: WARNING: +----------------------------------------------------------
configure: WARNING: | Cannot determine global symbol prefix.
configure: WARNING: | link -dump -symbols output doesn't contain a global data symbol.
configure: WARNING: | Will proceed with no underscore.
configure: WARNING: | If this is wrong then you'll get link errors referring
configure: WARNING: | to ___gmpn_add_n (note three underscores).
configure: WARNING: | In this case do a fresh build with an override,
configure: WARNING: |     ./configure gmp_cv_asm_underscore=yes
configure: WARNING: +----------------------------------------------------------
checking how to switch to read-only data section... .data
checking for assembler .type directive... 
checking for assembler .size directive... 
checking for assembler local label prefix... configure: WARNING: "link -dump -symbols" failure
configure: WARNING: cannot determine local label, using default L
L
checking for assembler byte directive... .byte
checking how to define a 32-bit word... link: illegal option -- d

Ответы [ 2 ]

6 голосов
/ 09 марта 2011

Я думаю, что вы не уверены, какой пакет должен быть скомпилирован для какой платформы:

  • GCC должен быть скомпилирован для хоста MacOS X x86_64 и цели i386-linux.

  • GMP, MPC и MPFR являются зависимостями времени выполнения для GCC.Поэтому они также должны быть скомпилированы для хоста GCC - x86_64 в вашем случае.Поэтому параметр --host=i386-linux в команде настройки GMP является неправильным.

В общем случае для перекрестной сборки нужно создавать только библиотеки, которые будут связаны в программах, скомпилированных GCC.цель компилятора (например, i386-linux).GMP и MPFR не являются такими библиотеками, если только ваши программы их фактически не используют - в этом случае вам потребуется две копии таких библиотек, одна для GCC и перекрестная сборка для цели.

РЕДАКТИРОВАТЬ:

Рассматривали ли вы возможность использования MacPorts ?Он имеет все зависимости для вашего кросс-компилятора:

Существует также более старая версия на основе newlibкросс-компилятор для i386:

Даже если вы не хотите использовать этивы все еще можете взглянуть на инструкции по сборке в их файлах портов.

Суть в следующем:

  • Примените все патчи, в которых нуждаются эти библиотеки - MacPorts уже это делает.

  • Скомпилируйте библиотеки для хоста сборки , то есть MacOSX / x86_64.Это означает, что в любых опциях --host для их вызовов конфигурации вы должны быть чем-то вроде --host=x86_64-darwin (или того, что нужно вашему хосту).Если configure может определить хост самостоятельно, вы можете вообще пропустить опции --host.

  • Компилировать GCC с --host, являющимся вашим хостом сборки (64-битная Mac OS X) и цель i386-linux, например --target=i386-linux.На вашем месте я бы начал с простого компилятора только для языков C и C ++.

См. Также этот учебник .В нем есть некоторая информация о том, как создать работающий набор инструментов с правильным glibc.

Тем не менее, я думаю, что вам лучше установить надлежащий дистрибутив Linux на виртуальной машине по целому ряду причин.,Есть ли причина, по которой вам нужен именно кросс-компилятор?Что вы хотите сделать с этим компилятором?

0 голосов
/ 08 марта 2011

Использовали ли вы опцию "ABI = 32" при компиляции GMP?Если нет, я думаю, что он будет использовать 64-битный код, даже если хост / цель указаны как i386.

...