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

115

Вчера я установил 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). Как я могу исправить эту проблему?

andycoder
источник
Проверьте информацию о мультиархитектуре для Ubuntu. Вы можете добавить: i386 к имени пакета, чтобы установить его 32-битную версию.
TeTeT
1
У меня именно эта проблема, мне нужны ia32-libs для запуска клиента fortinet vpn, он отлично работал под 10.04 LTS и 12.04 LTS. Я пробовал «sudo apt-get install ia32-libs: i386», но не работал, я также установил пакеты «lib32z1 lib32ncurses5 lib32bz2-1.0», но они не работают.
javaPhobic
@javaPhobic Я решаю установить ubuntu12.04 (32 бит). На свой вопрос у меня есть ответы. Это не мои ключи, но они могут помочь вам. 1. вы можете попробовать очистить, а затем снова создать свой код. 2. вы можете попробовать установить целые ia32-libs, как и ответ Майка Танга. 3. Вы можете попробовать добавить `` -m32` , когда вы обходите свой код, например: gcc -m32 helloworld.c. Удачи.
andycoder
Это действительно должно быть при сбое сервера.
AStopher
2
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он касается расположения библиотек для Linux. Хотя косвенно о программировании, решение будет скорее ответом на конфигурацию Linux, а не на программирование.
BradleyDotNET,

Ответы:

140

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

sudo  apt-get install program:i386

sudo dpkg --add-architecture 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

MikeCoder
источник
3
E: Пакет 'ia32-libs' не имеет кандидата на установку
ThatAintWorking
2
Мне не удалось получить доступ к archive.ubuntu.com. Много пока не нашелapt-get update . Поэтому я изменил исходный код пакета на deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Теперь это работает.
Тим Ву
3
Редкий архив больше не доступен в архиве ubuntu. Я заменил архив raring на точный архив. Пакет ia32-libs будет установлен.
Martijn Burger
Не работает 14.04. Решение, которое мне подходит, - это ответ Алексея.
joelparkerhenderson
1
вторая строка - echo «deb old-releases.ubuntu.com/ubuntu raring main limited universe multiverse»> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen
77

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

sudo apt-get install gcc-multilib
Нельсон Чен
источник
2
Этот метапакет gcc-Multilib в версии 14.04 является ближайшей заменой метапакета ia32-libs из версии 12.04, с которой я встречался до сих пор, но он по-прежнему не удовлетворяет зависимостям пакетов, которые явно установлены на ia32-libs ,
quickthyme
7
Не могу проголосовать за это достаточно. Это и libstdc++6-4.7-dev:i386требуется для извлечения виртуальных машин Internet Explorer с www.modern.ie
Тек,
это все еще работает в Ubuntu 16.04 (но я не знаю, насколько это полно)
Питер,
Мне также пришлось:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Майк Годин
56

Лучший ответ, который я когда-либо видел: как запускать 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 (набитым clockworkmod углеродом / гелием). Спасибо за этот ответ, который был правильным для моей проблемы (возможно, не проблема OP, хотя ^^). И вообще, этот ответ мне кажется более чистым. Не добавляйте ссылку на репозиторий предыдущей предыдущей версии ubuntu, я уверен, что впоследствии это создаст большой беспорядок…
Доланор
1
Это также помогло мне, когда я получил бесполезную (и вряд ли какие-либо результаты Google, так что молитесь, чтобы это было проиндексировано) ошибка «ошибка при загрузке разделяемых библиотек: libncurses.so.5». Спасибо!
Honoki
отличный ответ для Ubuntu 14.04, но не работает 16.04
Питер,
29

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

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 .

andycoder
источник
Вероятно, это очевидно для любого, кто действительно должен это делать, но не ставьте "/" в операторе rm.
keefer
Да, это моя ошибка. Я исправил это сейчас. Спасибо ~ @keefer
andycoder
2
-1: Хотя это работает, это действительно плохая практика. В этом сообщении AskUbuntu есть гораздо лучшие решения, которые не требуют установки старых репозиториев. Этот метод нужен только для очень старых двоичных пакетов. Но поскольку у вас есть исходный код, этот метод действительно не подходит.
jmiserez 06
Редкий архив больше не доступен в архиве ubuntu. Я заменил архив raring на точный архив. Пакет ia32-libs будет установлен.
Женя
-1 мне тоже. Вы столкнетесь с кучей проблем с зависимостями от двух версий. Даже если вы потом удалили редкие отсылки. Полностью согласен с @jmiserez.
Dolanor
20

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

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
wisbucky
источник
17

У меня была та же проблема, что и выше, и 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-битную версию libstdc ++ 6:

sudo apt-get install lib32stdc++6
боб
источник
Это кажется мне решением, поскольку пакет ia32-libs устарел и работает!
Дэниел Суза 03
Это lib32z1бесценно
zjk
8

Для меня я должен бежать

sudo dpkg --add-architecture i386

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

fkpwolf
источник
4

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

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

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

Цитата webupd8.org :

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

«Исправление» или, точнее, правильный способ установки этих приложений, зависящих от ia32-libs, - это просто установить 32-битный пакет на 64-битную Ubuntu. Конечно, это установит довольно много 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
Серж Строобандт
источник
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» на «точное» (для Ubuntu 13.04 (Raring Ringtail) и Ubuntu 12.04 LTS (Precise Pangolin) , соответственно). Я установил Beyond Compare на Ubuntu 14.04 (Trusty Tahr).

user3999490
источник
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файла пакетный путь. У меня это работает. Я хочу, чтобы это вам помогло.

bbruno5
источник
deb ftp: // ftp. нас ... и т. д., это работает, но не решило мою проблему (
waza123,