Проблемы кросс-компиляции с GCC / G ++

Я использую gcc для компиляции приложения C ++ на моем CI-сервере ( http://ci.berboe.co.uk ), и поскольку VPS, на котором оно компилируется, имеет архитектуру x86-64 Мне нужно сделать кросс-компиляцию, чтобы скомпилированная программа работала на компьютерах с архитектурой x86.

Я установил gcc-multilib и g ++ - multilib и несколько других пакетов, которые были предложены в других местах, но я все равно получаю сообщение об ошибке при попытке компиляции. Это:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

Полные журналы доступны здесь: http://ci.berboe.co.uk/job/MCServer%20Linux-x86/11/console

Любая помощь в решении этого вопроса будет высоко ценится.

Редактировать:

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation

Я получаю это после исправления предыдущей проблемы.

6
задан 10 February 2013 в 16:42

3 ответа

Тебе лучше сделать chroot для i386. mk-sbuild (в ubuntu-dev-tools) и schroot упрощают управление ими.

0
ответ дан 10 February 2013 в 16:42

Есть две опции, которые могут работать :

  1. Установите пакет ia32-libs, запустив sudo apt-get install ia32-libs. Это просто догадка, она может или не может работать.
  2. Другим решением может быть установка 32-битной Linux на виртуальной машине для компиляции кода.

Эта ссылка может помочь: - http://en.sfml-dev.org/forums/index.php?topic=6034.0

0
ответ дан 10 February 2013 в 16:42
  • Установите 32-битные библиотеки (ia32-libs в некоторых дистрибутивах, перейдя к этому: http://wiki.debian.org/Multiarch/HOWTO в других, подробнее об этом, если вы спросите) для этого).
  • Обязательно добавьте путь к библиотеке i386 в вашу LD_LIBRARY_PATH среду. переменная. (наверняка export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu и т. д.).
  • Обязательно добавьте путь включения i386 в переменную среды LD_INCLUDE_PATH.

Не стесняйтесь искать эти библиотеки (раз уж они установлены), используя:

find / -iname "*libstdc++.so*" 2> /dev/null

, например, для библиотеки libstdc++.so. find должен сообщить о каком-либо пути, который вы сможете добавить в переменную среды LD_LIBRARY_PATH.

0
ответ дан 10 February 2013 в 16:42

Другие вопросы по тегам:

Похожие вопросы: