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

6

Я использую gcc для компиляции приложения C ++ на моем CI-сервере ( Ссылка ) и как 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

Полные журналы доступны здесь: Ссылка

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

Изменить:

/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

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

    
задан hifkanotiks 03.02.2013 в 15:13
источник

3 ответа

3
  • Установите 32 бита libs ( ia32-libs в некоторых дистрибутивах, перейдя к следующему: Ссылка в других, больше об этом если вы попросите его).
  • Обязательно добавьте путь библиотеки i386 к вашему LD_LIBRARY_PATH env. переменная. (наиболее вероятно, 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 .

    
ответ дан user129005 06.02.2013 в 16:03
источник
1

Есть два варианта, которые может работать:

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

Эта ссылка может помочь:  - Ссылка

    
ответ дан green 06.02.2013 в 09:15
1

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

    
ответ дан Colin Watson 10.02.2013 в 17:21