Come installare ia32-libs in Ubuntu 14.04 LTS (Trusty Tahr)


115

Ieri ho installato Ubuntu 14.04 (Trusty Tahr). Sembra tutto a posto. Ma quando ho provato a compilare del codice C, ho riscontrato il seguente errore. L'errore sembra essere dovuto al sistema operativo privo del supporto dell'architettura a 32 bit. L'output dell'errore è il seguente:

/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

Lo apt-get install ia32-libsfacevo quando usavo Ubuntu 12.04 (Precise Pangolin). Ma quello che so è che Ubuntu ha rimosso ia32-libs da Ubuntu 13.10 (Saucy Salamander). Come posso risolvere questo problema?


Controlla le informazioni sul multiarchiale per Ubuntu. È possibile aggiungere: i386 al nome di un pacchetto per installarne la versione a 32 bit.
TeTeT

1
Ho esattamente questo problema, ho bisogno di ia32-libs per eseguire il client fortinet vpn, ha funzionato perfettamente con 10.04 LTS e 12.04 LTS. Ho provato 'sudo apt-get install ia32-libs: i386' ma non funziona, ho anche installato i pacchetti 'lib32z1 lib32ncurses5 lib32bz2-1.0' ma non funzionano.
javaPhobic

@javaPhobic decido di installare ubuntu12.04 (32bit). Riguardo alla mia domanda, ho alcune risposte. Non sono le mie chiavi, ma possono darti aiuto. 1. puoi provare a pulire, quindi creare di nuovo il codice. 2. puoi provare a installare intere librerie ia32, proprio come la risposta di Mike Tang. 3. si può provare ad aggiungere `` -m32` quando si bussola il codice, ad esempio: gcc -m32 helloworld.c. In bocca al lupo.
andycoder

Questo dovrebbe davvero essere su Server Fault.
AStopher

2
Voto per chiudere questa domanda come fuori tema perché riguarda l'ubicazione delle librerie per Linux. Sebbene tangenzialmente sulla programmazione, la soluzione sarà più una risposta di configurazione di Linux, non di programmazione.
BradleyDotNET

Risposte:


140

Puoi provare questo per installare la libreria a 32 bit (non tutte in ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 potrebbe essere richiesto (se non l'hai mai eseguito).


Oppure, se desideri installare l'intera ia32-lib, prova il seguente ordine:

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: in questo modo puoi installare ia32-libs. Tuttavia, aggiungiamo invece la fonte della 13.04, quindi potrebbe esserci qualche problema sconosciuto. Dopo l'installazione ia32-libs, ti consiglio di rimuovere ia32-libs-raring.listin /etc/apt/sources.list.d, e fai sudo apt-get update.


Se vuoi correggere la dipendenza di Android SDK, puoi provare questo seguente:

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


3
E: Il pacchetto 'ia32-libs' non ha candidati all'installazione
ThatAintWorking

2
Non sono riuscito ad accedere a archive.ubuntu.com. Molti non trovati mentre apt-get update. Quindi ho cambiato l'origine del pacchetto in deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Ora funziona.
Tim Wu

3
L'archivio raro non è più disponibile nell'archivio ubuntu. Ho cambiato l'archivio raring per l'archivio preciso. Il pacchetto ia32-libs verrà installato ora.
Martijn Burger

Non funziona il 14.04. La soluzione che funziona per me è la risposta di Aleksei.
joelparkerhenderson

1
la seconda riga è echo "deb old-releases.ubuntu.com/ubuntu raring main limited universe multiverse"> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen

77

Installa la libreria multipla di gcc.

sudo apt-get install gcc-multilib

2
Questo meta pacchetto gcc-multilib nella 14.04 è il sostituto più vicino per il meta pacchetto ia32-libs che era nella 12.04 che ho incontrato finora, ma non soddisfa ancora le dipendenze del pacchetto che sono esplicitamente impostate su ia32-libs .
quickthyme

7
Non posso votare abbastanza. Questo ed libstdc++6-4.7-dev:i386è necessario per estrarre le macchine virtuali di Internet Explorer da www.modern.ie
Tek

funziona ancora su Ubuntu 16.04 (ma non so quanto sia completo)
Peter

Ho anche dovuto:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin

56

La migliore risposta che abbia mai visto è: come eseguire applicazioni a 32 bit su Ubuntu a 64 bit?

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo ./adb

2
Era totalmente un problema con il mio adb (pieno di carbonio / elio di clockworkmod). Grazie per quella risposta che è stata perfetta per il mio problema (forse non è un problema OP, però ^^). E comunque, questa risposta mi sembra essere la più pulita. Non è possibile aggiungere il collegamento al repository della versione precedente di Ubuntu, che creerà un grande pasticcio in seguito, ne sono sicuro ...
Dolanor

1
Questo ha anche fatto il trucco per me, dove ho ricevuto l'errore inutile (e quasi nessun risultato di Google, quindi prego che venga indicizzato) errore "durante il caricamento delle librerie condivise: libncurses.so.5". Grazie!
Honoki

ottima risposta per Ubuntu 14.04 ma non funziona il 16.04
Peter

29

Finalmente ho capito! Ecco la mia strada e spero che possa aiutarti :)

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

Non so il motivo per cui ho bisogno di installarli, ma funziona sul mio computer. Quando finisci di installare questi pacchetti, è ora di provare. Oh sì, devo dirtelo. Questa volta, quando si vuole compilare il codice, si dovrebbe aggiungere -m32dopo gcc, per esempio: gcc -m32 -o hello helloworld.c. Solo make cleane makeancora. Buona fortuna amici.

PS: il mio ambiente è: Ubuntu 14.04 a 64 bit (Trusty Tahr) e GCC versione 4.8.4. Ho scritto la soluzione nel mio blog, ma è in cinese :-) - Come bussare al programma a 32 bit sotto ubuntu14.04 .


Probabilmente è ovvio per chiunque debba effettivamente farlo, ma non mettere la "/" nell'istruzione rm.
keefer

Sì, è un mio errore. L'ho risolto ora. Grazie ~ @keefer
andycoder

2
-1: Anche se funziona, è davvero una cattiva pratica. Ci sono soluzioni molto migliori in questo post di AskUbuntu che non richiedono l'installazione di vecchi repository. Questo metodo dovrebbe essere necessario solo per pacchetti binari molto vecchi. Ma poiché hai il codice sorgente, questo metodo non è davvero appropriato.
jmiserez

L'archivio raro non è più disponibile nell'archivio ubuntu. Ho cambiato l'archivio raring per l'archivio preciso. Il pacchetto ia32-libs verrà installato ora.
Zhenya

-1 anche per me. Dovrai affrontare un sacco di problemi con le dipendenze provenienti da 2 versioni. Anche se in seguito hai rimosso i riferimenti rari. Totalmente d'accordo con @jmiserez.
Dolanor

20

Queste librerie alternative hanno funzionato per me:

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

17

Ho avuto lo stesso problema di cui sopra ed Eclipse ha suggerito di installare:

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"   

Quando ho provato a installare ia32-libs, Ubuntu mi ha chiesto di installare altri tre pacchetti:

$ 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    

Con Android Studio e intellij, ho anche dovuto installare la versione a 32 bit di libstdc ++ 6:

sudo apt-get install lib32stdc++6

Questa sembra la soluzione per me, poiché il pacchetto ia32-libs è obsoleto e funziona!
daniel souza

Questo non ha lib32z1prezzo
zjk

8

Per me devo correre

sudo dpkg --add-architecture i386

prima di eseguire la risposta di Mike Tang. Altrimenti, non posso installare ia32-libs.


4

Installa semplicemente la versione a 32 bit del programma, invece della versione a 64 bit.

Questo è molto più sicuro che installare pacchetti che non sono destinati alla distribuzione attuale.

Ho ricevuto questo suggerimento dalle istruzioni di installazione di Google Earth per Ubuntu 14.04 . Google Earth utilizzava ia32-libsUbuntu 12.04 a 64 bit.

Citando webupd8.org :

Il pacchetto ia32-libs non è più disponibile in Ubuntu, a partire da Ubuntu 13.10. Il pacchetto è stato sostituito dal supporto multiarchiale quindi non ne hai più bisogno, ma alcuni pacchetti a 64 bit (che in realtà sono applicazioni a 32 bit) dipendono ancora da questo pacchetto e per questo motivo non possono essere installati in Ubuntu 14.04 o 13.10, 64bit. [...]

La "correzione" o più specificamente il modo corretto di installare queste app che dipendono da ia32-libs è semplicemente installare il pacchetto a 32 bit su Ubuntu 64bit. Ovviamente questo installerà un bel po 'di pacchetti a 32 bit, ma è così che funziona il multiarch.

Il problema con alcuni programmi (come Google Earth) è che il pacchetto a 32 bit non supporta il multiarch. Di conseguenza, alcune dipendenze a 32 bit devono essere installate manualmente per far funzionare la versione a 32 bit del programma su Ubuntu a 64 bit.

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

Se sei in Cina, puoi modificare "raring" in "precise" (per Ubuntu 13.04 (Raring Ringtail) e Ubuntu 12.04 LTS (Precise Pangolin) , rispettivamente). Ho installato Beyond Compare su Ubuntu 14.04 (Trusty Tahr).


1

Il problema è che in molti casi i pacchetti sono già multiarch, quindi il pacchetto i386 non è disponibile, ma altri pacchetti dipendono ancora solo dal pacchetto i386. Questo è un problema nel repository e i gestori dei repository dovrebbero risolverlo


0

Una soluzione è aggiungere il corrispondente pacchetto Debian al tuo repository. Per questo, digita i seguenti comandi:

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

La prima riga scrive alla fine del sources.listfile nel modo del pacchetto. Questo funziona per me. Spero che ti aiuti.


deb ftp: / / ftp. noi .. ecc, funziona, ma non ha risolto il mio problema (
waza123
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.