Как установить ia32-libs в Ubuntu 14.04 LTS (Trusty Tahr)

116

Вчера я установил Ubuntu 14.04 (Trusty Tahr). Все кажется ОК. Но когда я попытался скомпилировать код C, я столкнулся со следующей ошибкой. Похоже, что ошибка связана с тем, что ОС не поддерживает 32-битную архитектуру. Вывод ошибки следующий:

/usr/bin/ld: i386 architecture of input file `./libsc.a(ftl_msg.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_debug.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_str.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_cfg_common.o)' is incompatible with i386:x86-64 output

Я использовал apt-get install ia32-libs, когда использовал Ubuntu 12.04 (Precise Pangolin). Но я знаю, что Ubuntu удалил ia32-libs с Ubuntu 13.10 (Saucy Salamander). Как я могу исправить эту проблему?

  • 0
    Проверьте информацию о multiarch для Ubuntu. Вы можете добавить: i386 к имени пакета, чтобы установить его 32-битную версию.
  • 1
    У меня есть именно эта проблема, мне нужен ia32-libs для запуска клиента fortinet vpn, он отлично работал под 10,04 LTS и 12,04 LTS. Я пробовал 'sudo apt-get install ia32-libs: i386', но не работает, я также установил пакеты 'lib32z1 lib32ncurses5 lib32bz2-1.0', но они не работают.
Показать ещё 4 комментария
Теги:
x86

11 ответов

132
Лучший ответ

Вы можете попробовать установить 32-битную библиотеку (не все в ia32-libs):

apt-get install program:i386

Или, если вы хотите установить все ia32-lib вместо этого, попробуйте выполнить следующий порядок:

sudo -i
cd /etc/apt/sources.list.d
echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs

PS: Таким образом, вы можете установить ia32-libs. Однако вместо этого мы добавляем источник 13.04, поэтому может возникнуть какая-то неизвестная проблема. После установки ia32-libs я рекомендую удалить ia32-libs-raring.list в /etc/apt/sources.list.d и сделать sudo apt-get update.


Если вы хотите исправить зависимость Android SDK, вы можете попробовать следующее:

sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1

  • 3
    E: Пакет 'ia32-libs' не имеет кандидата на установку
  • 2
    Я не мог получить доступ к archive.ubuntu.com. Многие не найдены при apt-get update . Поэтому я изменил исходный код пакета на deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse . Теперь это работает.
Показать ещё 9 комментариев
69

Установите gcc несколько библиотек.

sudo apt-get install gcc-multilib
  • 2
    Этот метапакет gcc-multilib в 14.04 является ближайшей заменой метапакета ia32-libs, который был в 12.04, который я встречал до сих пор, но он все еще не удовлетворяет зависимостям пакетов, которые явно установлены в ia32-libs ,
  • 7
    Не могу отказать этому достаточно. Это и libstdc++6-4.7-dev:i386 требуется для извлечения виртуальных машин Internet Explorer из www.modern.ie
Показать ещё 2 комментария
55

Лучший ответ, который я когда-либо видел, - Как запустить 32-разрядные приложения на 64-битной версии Ubuntu?

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo ./adb
  • 2
    Это была полностью проблема с моим adb (упакованным с часовым механизмом углерод / гелий). Спасибо за этот ответ, который был найден для моей проблемы (возможно, не проблема OP, хотя ^^). И в любом случае, этот ответ кажется мне чище. Я не уверен, что добавлю предыдущую предыдущую ссылку на репозиторий версии Ubuntu, что впоследствии создаст большой беспорядок ...
  • 1
    Это также помогло мне, когда я получил бесполезную (и вряд ли какие-либо результаты Google, так что, молитесь, это индексируется) ошибку «ошибка при загрузке общих библиотек: libncurses.so.5». Спасибо!
Показать ещё 1 комментарий
28

Я получил его наконец! Вот мой путь, и я надеюсь, что это может вам помочь:)

sudo apt-get install libc6:i386
sudo -i
cd /etc/apt/sources.list.d
echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs
rm /etc/apt/sources.list.d/ia32-libs-raring.list
apt-get update
exit
sudo apt-get install gcc-multilib

Я не знаю, почему мне нужно установить их, но он работает на моем компьютере. Когда вы закончите установку этих пакетов, пришло время попробовать. О да, я должен вам сказать. На этот раз, когда вы хотите скомпилировать свой код, вы должны добавить -m32 после gcc, например: gcc -m32 -o hello helloworld.c. Просто make clean и make снова. Удачи друзьям.

PS: моя среда: Ubuntu 14.04 64-бит (Trusty Tahr) и версия GCC 4.8.4. Я написал решение в своем блоге, но это на китайском языке:-) - Как компас 32-разрядной программы под ubuntu14.04.

  • 0
    Вероятно, это очевидно для любого, кто действительно должен это делать, но не ставьте «/» в выражении rm.
  • 0
    Да, это моя ошибка. Я исправил это сейчас. Спасибо ~ @keefer
Показать ещё 4 комментария
20

Эти альтернативные библиотеки работали для меня:

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
16

У меня была та же проблема, что и выше, и Eclipse предложила установить:

Hint: On 64-bit systems, make sure the 32-bit libraries are installed:   
   "sudo apt-get install ia32-libs"    
or on some systems,  
   "sudo apt-get install lib32z1"   

Когда я попытался установить ia32-libs, Ubuntu предложила установить еще три пакета:

$ sudo apt-get install ia32-libs  
Reading package lists... Done  
Building dependency tree         
Reading state information... Done  
Package ia32-libs is not available, but is referred to by another package.  
This may mean that the package is missing, has been obsoleted, or  
is only available from another source  
However the following packages replace it:  
  lib32z1 lib32ncurses5 lib32bz2-1.0  

E: Package 'ia32-libs' has no installation candidate  
$   
$ sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0    

С Android Studio и intellij мне также пришлось установить 32-битную версию libstdС++ 6:

sudo apt-get install lib32stdc++6
  • 0
    Это кажется решением для меня, так как пакет ia32-libs устарел, и он работает!
  • 0
    Этот lib32z1 бесценен
5

Для меня мне нужно запустить

sudo dpkg --add-architecture i386

перед запуском правильного ответа. В противном случае я не могу установить ia32-libs.

2
sudo -i
cd /etc/apt/sources.list.d
echo "deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs
rm /etc/apt/sources.list.d/ia32-libs-raring.list
apt-get update
exit

Если вы находитесь в Китае, вы можете изменить "raring" на "exact" (для Ubuntu 13.04 (Raring Ringtail) и Ubuntu 12.04 LTS (точный панголин) соответственно). Я установил Beyond Compare в Ubuntu 14.04 (Trusty Tahr).

2

Просто установите 32-разрядную версию программы вместо 64-разрядной версии.

Это намного безопаснее, чем установка пакетов, которые не предназначены для распространения.

Я получил это предложение из Инструкции по установке Google Планета Земля для Ubuntu 14.04. Google Планета Земля использовала ia32-libs под 64-разрядным Ubuntu 12.04.

Цитата webupd8.org:

Пакет ia32-libs больше не доступен в Ubuntu, начиная с Ubuntu 13.10. Пакет был заменен поддержкой multiarch, поэтому вы больше не нужны, но некоторые 64-битные пакеты (которые на самом деле 32-битные приложения) все еще зависят от этого пакета, и из-за этого, они не могут быть установлены в Ubuntu 14.04 или 13.10, 64 бит. [...]

"Исправить" или, более конкретно, правильный способ установки этих приложения, которые зависят от ia32-libs, - это просто установить 32-битный пакет на Ubuntu 64 бит. Конечно, это установит довольно много 32-битных пакетов, но то, как работает многоархивир.

Проблема с некоторыми программами (например, Google Earth) заключается в том, что 32-разрядный пакет не поддержка многоархив. Следовательно, некоторые 32-разрядные зависимости необходимо установить вручную, чтобы 32-разрядная версия программы выполнялась на 64-разрядной версии Ubuntu.

sudo dpkg --add-architecture i386 # only needed once
sudo apt-get update
sudo apt-get install libfontconfig1:i386 libx11-6:i386 libxrender1:i386 libxext6:i386 libgl1-mesa-glx:i386 libglu1-mesa:i386 libglib2.0-0:i386 libsm6:i386
1

Проблема в том, что во многих случаях пакеты уже многоархиво, поэтому пакет i386 недоступен, но другие пакеты по-прежнему зависят только от пакета i386. Это проблема в репозитории, и менеджеры репозиториев должны ее исправить.

0

Решение добавляет соответствующий пакет Debian в ваш репозиторий. Для этого введите следующие команды:

echo "deb ftp.us.debian.org/debian wheezy main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install ia32-libs-i386

Первая строка записывает в конец файла sources.list путь к пакету. Это работает для меня. Я хочу, чтобы это помогло вам.

  • 0
    deb ftp: // ftp. мы .. и т. д., это работает, но не решило мою проблему (

Ещё вопросы

Сообщество Overcoder
Наверх
Меню