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


115

Я вчора встановив Ubuntu 14.04 (Trusty Tahr). Все здається нормально. Але коли я спробував скласти якийсь код С, я зіткнувся з такою помилкою. Здається, помилка пов’язана з відсутністю в 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 (Precision Pangolin). Але я знаю, що Ubuntu видалив ia32-libs з часу Ubuntu 13.10 (Saucy Salamander). Як я можу виправити цю проблему?


Перевірте інформацію про мультиарх для 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 (32bit). Щодо мого запитання я отримав кілька відповідей. Вони не є моїми ключами, але можуть допомогти вам. 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


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
Архів Raring вже недоступний в архіві ubuntu. Я змінив архів рейтинг на точний архів. Пакет ia32-libs встановиться зараз.
Martijn Burger

Не працює 14.04. Рішення, яке працює для мене, - це відповідь Олексія.
joelparkerhenderson

1
другий рядок - відлуння "deb old-releases.ubuntu.com/ubuntu raring main unverseverse 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 .
fastthyme

7
Неможливо цього підтвердити. Це libstdc++6-4.7-dev:i386потрібно для вилучення віртуальних машин Internet Explorer з веб-сайту www.modern.ie
Tek

це все ще працює на 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 (укомплектований годинниковим модулем вуглець / гелій). Дякую за ту відповідь, на якій виявилися мої проблеми (можливо, це не проблема з ОП, хоча ^^). І все одно, ця відповідь здається мені чистішою. Ніякого додавання попереднього попереднього посилання на сховище версії ubuntu, що призведе до великого безладу після цього, я впевнений…
Доланор

1
Це також зробило трюк для мене, де я отримав непосильну (і навряд чи будь-які результати Google, тому молюся, щоб ця індексувалася) помилка "помилка під час завантаження спільних бібліотек: libncurses.so.5". Дякую!
Хонокі

чудова відповідь для 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 .


Це, мабуть, очевидно для тих, хто насправді має це робити, але не ставити "/" у операторі rm.
кифер

Так, це моя помилка. Я зараз це виправив. Дякую ~ @keefer
andycoder

2
-1: Хоча це працює, це дійсно погана практика. У цій публікації AskUbuntu є набагато кращі рішення , які не потребують встановлення старих сховищ. Цей метод потрібен лише для дуже старих бінарних пакетів. Але оскільки у вас є вихідний код, цей спосіб справді не підходить.
jmiserez

Архів Raring вже недоступний в архіві ubuntu. Я змінив архів рейтинг на точний архів. Пакет ia32-libs встановиться зараз.
Женя

-1 для мене теж. Ви зіткнетеся з безліччю проблем із залежностями, які виходять із двох версій. Навіть якщо згодом ви видалили рейтингові посилання. Цілком згоден з @jmiserez.
Доланор

20

Ці альтернативні бібліотеки працювали для мене:

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

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 застарілий, і він працює!
daniel souza

Це lib32z1безцінно
zkk

8

Для мене треба бігати

sudo dpkg --add-architecture i386

перш ніж запустити відповідь Майка Танга. Інакше я не можу встановити ia32-libs.


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-бітний пакет на Ubuntu 64bit. Звичайно, це встановить досить багато 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

Якщо ви перебуваєте в Китаї, ви можете змінити "рейтинг" на "точний" (для Ubuntu 13.04 (Raring Ringtail) і Ubuntu 12.04 LTS (Precision Pangolin) відповідно). Я встановив програму Beyond Compare на Ubuntu 14.04 (Trusty Tahr).


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файлу пакетний шлях. Це працює для мене. Я хочу, щоб це допомогло тобі.


deb ftp: / / ftp. нас .. тощо. Це працює, але не вирішило мою проблему (
waza123
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.