Jak zainstalować ia32-libs w Ubuntu 14.04 LTS (Trusty Tahr)

115

Wczoraj zainstalowałem Ubuntu 14.04 (Trusty Tahr). Wszystko wydaje się w porządku. Ale kiedy próbowałem skompilować kod C, napotykam następujący błąd. Wydaje się, że błąd jest spowodowany brakiem obsługi architektury 32-bitowej przez system operacyjny. Wynik błędu jest następujący:

/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

Kiedyś używałem apt-get install ia32-libsUbuntu 12.04 (Precise Pangolin). Ale wiem, że Ubuntu usunęło ia32-libs od Ubuntu 13.10 (Saucy Salamander). Jak mogę rozwiązać ten problem?

andycoder
źródło
Sprawdź informacje o multiarchach dla Ubuntu. Możesz dołączyć: i386 do nazwy pakietu, aby zainstalować jego 32-bitową wersję.
TeTeT
1
Mam dokładnie ten problem, potrzebuję ia32-libs do uruchomienia klienta VPN Fortinet, działał idealnie pod 10.04 LTS i 12.04 LTS. Próbowałem 'sudo apt-get install ia32-libs: i386', ale nie działa, zainstalowałem również pakiety 'lib32z1 lib32ncurses5 lib32bz2-1.0', ale nie działają.
javaPhobic
@javaPhobic Decyduję się zainstalować ubuntu12.04 (32bit). Co do mojego pytania, mam kilka odpowiedzi. To nie są moje klucze, ale mogą ci pomóc. 1. możesz spróbować wyczyścić, a następnie ponownie utworzyć kod. 2. możesz spróbować zainstalować całe ia32-libs, tak jak odpowiada Mike Tang. 3. można spróbować dodać `` -m32` kiedy kompas swój kod, na przykład: gcc -m32 helloworld.c. Powodzenia.
andycoder
To powinno naprawdę dotyczyć błędu serwera.
AStopher
2
Głosuję za zamknięciem tego pytania jako niezwiązanego z tematem, ponieważ dotyczy on lokalizacji bibliotek dla systemu Linux. Chociaż stycznie do programowania, rozwiązanie będzie bardziej odpowiedzią na konfigurację Linuksa, a nie programistyczną.
BradleyDotNET

Odpowiedzi:

140

Możesz spróbować zainstalować 32-bitową bibliotekę (nie wszystkie w ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 może być wymagane (jeśli nigdy tego nie uruchomiłeś).


Lub jeśli zamiast tego chcesz zainstalować całą ia32-lib, wypróbuj następującą kolejność:

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: W ten sposób możesz zainstalować ia32-libs. Jednak zamiast tego dodajemy źródło 13.04, więc może wystąpić jakiś nieznany problem. Po zainstalowaniu ia32-libspolecam usunąć ia32-libs-raring.listin /etc/apt/sources.list.di zrobić sudo apt-get update.


Jeśli chcesz naprawić zależność od Android SDK, możesz spróbować tego poniżej:

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

MikeCoder
źródło
3
E: Pakiet „ia32-libs” nie ma kandydata do instalacji
ThatAintWorking
2
Nie mogłem uzyskać dostępu do archive.ubuntu.com. Wiele nie znaleziono w czasie apt-get update. Więc zmieniłem źródło pakietu na deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Teraz działa.
Tim Wu,
3
Archiwum Raring nie jest już dostępne w archiwum Ubuntu. Zmieniłem archiwum raring na dokładne archiwum. Pakiet ia32-libs zostanie teraz zainstalowany.
Martijn Burger,
Nie działa 14.04. Rozwiązaniem, które działa dla mnie, jest odpowiedź Aleksieja.
joelparkerhenderson
1
druga linia to echo "deb old-releases.ubuntu.com/ubuntu raring main limited universe multiverse"> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen
77

Zainstaluj wiele bibliotek gcc.

sudo apt-get install gcc-multilib
Nelson Chen
źródło
2
Ten meta pakiet gcc-multilib w 14.04 jest najbliższym zamiennikiem meta pakietu ia32-libs z 12.04, z którym się do tej pory spotkałem, ale nadal nie spełnia on zależności pakietu, które są jawnie ustawione na ia32-libs .
quickthyme
7
Nie mogę tego wystarczająco dobrze zagłosować. Jest libstdc++6-4.7-dev:i386to wymagane do wyodrębnienia maszyn wirtualnych Internet Explorer ze strony www.modern.ie
Tek
to nadal działa na Ubuntu 16.04 (ale nie wiem, jak jest kompletne)
Peter
Musiałem też:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin
56

Najlepsza odpowiedź, jaką kiedykolwiek widziałem, brzmi: Jak uruchamiać aplikacje 32-bitowe na 64-bitowym systemie Ubuntu?

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo ./adb
Aleksei
źródło
2
To był totalnie problem z moim adbem (wypełnionym zegarem węgla / helu). Dziękuję za odpowiedź, która była trafna w moim problemie (może nie problem z OP ^^). Zresztą ta odpowiedź wydaje mi się czystsza. Bez dodawania linku do poprzedniego repozytorium poprzedniej wersji Ubuntu, co spowoduje duży bałagan. Jestem pewien…
Dolanor
1
To również załatwiło sprawę dla mnie, ponieważ otrzymałem nieprzydatny (i prawie żadnych wyników Google, więc módl się, aby zostały zindeksowane) błąd „podczas ładowania bibliotek współdzielonych: libncurses.so.5”. Dzięki!
Honoki
świetna odpowiedź dla Ubuntu 14.04, ale nie działa 16.04
Peter
29

W końcu to dostałem! Oto moja droga i mam nadzieję, że może ci pomóc :)

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

Nie znam powodu, dla którego muszę je zainstalować, ale działa na moim komputerze. Po zakończeniu instalacji tych pakietów czas spróbować. O tak, muszę ci powiedzieć. Tym razem, gdy chcesz skompilować swój kod, powinieneś dodać -m32po nim gccnp gcc -m32 -o hello helloworld.c. : . Po prostu make cleani makeznowu. Powodzenia przyjaciele.

PS: moje środowisko to: Ubuntu 14.04 64-bit (Trusty Tahr) i GCC w wersji 4.8.4. Rozwiązanie napisałem na swoim blogu, ale jest po chińsku :-) - Jak kompasować program 32-bitowy pod ubuntu14.04 .

andycoder
źródło
Prawdopodobnie jest to oczywiste dla każdego, kto musi to zrobić, ale nie umieszczaj znaku „/” w instrukcji rm.
Keefer
Tak, to mój błąd. Naprawiłem to teraz. Dziękuję ~ @keefer
andycoder
2
-1: Chociaż to działa, jest to naprawdę zła praktyka. W tym poście AskUbuntu są znacznie lepsze rozwiązania , które nie wymagają instalowania starych repozytoriów. Ta metoda powinna być potrzebna tylko w przypadku bardzo starych pakietów binarnych. Ale ponieważ masz kod źródłowy, ta metoda naprawdę nie jest odpowiednia.
jmiserez
Archiwum Raring nie jest już dostępne w archiwum Ubuntu. Zmieniłem archiwum raring na dokładne archiwum. Pakiet ia32-libs zostanie teraz zainstalowany.
Zhenya
-1 dla mnie też. Napotkasz mnóstwo problemów z zależnościami pochodzącymi z 2 wersji. Nawet jeśli później usuniesz rzadkie odniesienia. Całkowicie zgadzam się z @jmiserez.
Dolanor
20

Te alternatywne biblioteki pracowały dla mnie:

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
wisbucky
źródło
17

Miałem ten sam problem co powyżej i Eclipse zasugerował instalację:

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"   

Kiedy próbowałem zainstalować ia32-libs, Ubuntu poprosił o zainstalowanie trzech innych pakietów:

$ 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    

W przypadku Android Studio i intellij musiałem również zainstalować 32-bitową wersję libstdc ++ 6:

sudo apt-get install lib32stdc++6
Pion
źródło
Wydaje mi się, że to rozwiązanie dla mnie, ponieważ pakiet ia32-libs jest przestarzały i działa!
daniel souza
To lib32z1jest bezcenne
zjk
8

Dla mnie muszę biec

sudo dpkg --add-architecture i386

przed uruchomieniem odpowiedzi Mike'a Tanga. W przeciwnym razie nie mogę zainstalować ia32-libs.

fkpwolf
źródło
4

Po prostu zainstaluj 32-bitową wersję programu zamiast 64-bitowej.

Jest to o wiele bezpieczniejsze niż instalowanie pakietów, które nie są przeznaczone do obecnej dystrybucji.

Mam tę sugestię z instrukcji instalacji programu Google Earth dla Ubuntu 14.04 . Google Earth pracował ia32-libspod 64-bitowym Ubuntu 12.04.

Cytując webupd8.org :

Pakiet ia32-libs nie jest już dostępny w Ubuntu, począwszy od Ubuntu 13.10. Pakiet został zastąpiony przez obsługę multiarch, więc już go nie potrzebujesz, ale niektóre pakiety 64-bitowe (które są w rzeczywistości aplikacjami 32-bitowymi) nadal zależą od tego pakietu iz tego powodu nie można ich zainstalować w Ubuntu 14.04 lub 13.10, 64-bitowy. […]

„Poprawką”, a dokładniej poprawnym sposobem instalacji tych aplikacji, które zależą od ia32-libs, jest po prostu zainstalowanie pakietu 32-bitowego w systemie Ubuntu 64bit. Oczywiście spowoduje to zainstalowanie kilku pakietów 32-bitowych, ale tak właśnie działa multiarch.

Problem z niektórymi programami (np. Google Earth) polega na tym, że pakiet 32-bitowy nie obsługuje multiarch. W związku z tym niektóre 32-bitowe zależności należy zainstalować ręcznie, aby 32-bitowa wersja programu działała na 64-bitowym systemie 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
Serge Stroobandt
źródło
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

Jeśli jesteś w Chinach, możesz zmienić „raring” na „precyzyjny” (odpowiednio dla Ubuntu 13.04 (Raring Ringtail) i Ubuntu 12.04 LTS (Precise Pangolin) ). Zainstalowałem Beyond Compare na Ubuntu 14.04 (Trusty Tahr).

user3999490
źródło
1

Problem polega na tym, że w wielu przypadkach pakiety są już multiarchowe, więc pakiet i386 nie jest dostępny, ale inne pakiety nadal zależą tylko od pakietu i386. To jest problem w repozytorium i menedżerowie repozytoriów powinni go naprawić

Rand McRanderson
źródło
0

Rozwiązaniem jest dodanie odpowiedniego pakietu Debiana do swojego repozytorium. W tym celu wpisz poniższe polecenia:

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

Pierwsza linia na końcu sources.listpliku zapisuje pakiet w sposób. To działa dla mnie. Chciałabym, żeby ci to pomogło.

bbruno5
źródło
deb ftp: / / ftp. nas ... itd., to działa, ale nie rozwiązało mojego problemu (
waza123,