Comment installer ia32-libs dans Ubuntu 14.04 LTS (Trusty Tahr)

115

J'ai installé Ubuntu 14.04 (Trusty Tahr) hier. Tout semble OK. Mais lorsque j'ai essayé de compiler du code C, je rencontre l'erreur suivante. L'erreur semble être due au fait que le système d'exploitation ne prend pas en charge l'architecture 32 bits. La sortie d'erreur est la suivante:

/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

J'avais l'habitude apt-get install ia32-libsquand j'utilisais Ubuntu 12.04 (Precise Pangolin). Mais ce que je sais, c'est qu'Ubuntu a supprimé les ia32-libs depuis Ubuntu 13.10 (Saucy Salamander). Comment puis-je résoudre ce problème?

Andycoder
la source
Vérifiez les informations multiarchives pour Ubuntu. Vous pouvez ajouter: i386 à un nom de package pour en installer la version 32 bits.
TeTeT
1
J'ai exactement ce problème, j'ai besoin des ia32-libs pour exécuter le client vpn fortinet, cela fonctionnait parfaitement sous 10.04 LTS et 12.04 LTS. J'ai essayé 'sudo apt-get install ia32-libs: i386' mais ne fonctionne pas, j'ai également installé les paquets 'lib32z1 lib32ncurses5 lib32bz2-1.0' mais ils ne fonctionnent pas.
javaPhobic
@javaPhobic Je décide d'installer ubuntu12.04 (32 bits). Concernant ma question, j'ai des réponses. Ce ne sont pas mes clés, mais peuvent vous aider. 1. vous pouvez essayer de nettoyer puis de créer à nouveau votre code. 2. vous pouvez essayer d'installer des ia32-libs entières, comme la réponse de Mike Tang. 3. vous pouvez essayer d'ajouter `` -m32` lorsque vous une boussole votre code, par exemple: gcc -m32 helloworld.c. Bonne chance.
andycoder
Cela devrait vraiment être sur Server Fault.
AStopher
2
Je vote pour fermer cette question comme hors sujet car il s'agit de l'emplacement des bibliothèques pour Linux. Bien que tangentiellement à propos de la programmation, la solution sera plus une réponse de configuration Linux, pas une réponse de programmation.
BradleyDotNET

Réponses:

140

Vous pouvez essayer ceci pour installer la bibliothèque 32 bits (pas toutes dans ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 peut être nécessaire (si vous ne l'avez jamais exécuté).


Ou si vous souhaitez installer la totalité de ia32-lib à la place, essayez l'ordre suivant:

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: De cette façon, vous pouvez installer ia32-libs. Cependant, nous ajoutons la source de 13.04 à la place, il peut donc y avoir un problème inconnu. Après l'installation ia32-libs, je vous recommande de supprimer le ia32-libs-raring.listin /etc/apt/sources.list.d, et de le faire sudo apt-get update.


Si vous souhaitez corriger la dépendance du SDK Android, vous pouvez essayer ceci ci-dessous:

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

MikeCoder
la source
3
E: Le paquet 'ia32-libs' n'a pas de candidat à l'installation
ThatAintWorking
2
Je n'ai pas pu accéder à archive.ubuntu.com. Beaucoup de non trouvé tout apt-get update. J'ai donc changé la source du paquet en deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Maintenant ça marche.
Tim Wu
3
L'archive rare n'est plus disponible sur l'archive ubuntu. J'ai changé l'archive ardente pour l'archive précise. Le paquet ia32-libs va s'installer maintenant.
Martijn Burger
Ne fonctionne pas le 14.04. La solution qui fonctionne pour moi est la réponse d'Aleksei.
joelparkerhenderson
1
la deuxième ligne est echo "deb old-releases.ubuntu.com/ubuntu raring main univers restreint multiverse"> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen
77

Installez plusieurs bibliothèques gcc.

sudo apt-get install gcc-multilib
Nelson Chen
la source
2
Ce méta-package gcc-multilib dans 14.04 est le remplacement le plus proche du méta-package ia32-libs qui était dans 12.04 que j'ai rencontré jusqu'à présent, mais il ne satisfait toujours pas les dépendances de package qui sont explicitement définies sur ia32-libs .
quickthyme
7
Je ne peux pas assez voter pour cela. Ceci libstdc++6-4.7-dev:i386est nécessaire pour extraire les machines virtuelles Internet Explorer de www.modern.ie
Tek
cela fonctionne toujours sur Ubuntu 16.04 (mais je ne sais pas à quel point il est complet)
Peter
Je devais aussi:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin
56

La meilleure réponse que j'ai jamais vue est Comment exécuter des applications 32 bits sur Ubuntu 64 bits?

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo ./adb
Aleksei
la source
2
C'était totalement un problème avec mon adb (emballé avec clockworkmod carbone / hélium). Merci pour cette réponse qui était parfaite pour mon problème (peut-être pas un problème OP, cependant ^^). Et de toute façon, cette réponse me semble être la plus propre. Pas d'ajout de lien vers le référentiel de la version précédente d'ubuntu, ce qui créera un gros désordre par la suite, j'en suis sûr…
Dolanor
1
Cela a également fait l'affaire pour moi, où j'ai obtenu l'erreur inutile (et pratiquement aucun résultat Google, alors priez pour que cela soit indexé) "erreur lors du chargement des bibliothèques partagées: libncurses.so.5". Merci!
Honoki
excellente réponse pour Ubuntu 14.04 mais ne fonctionne pas sur 16.04
Peter
29

Je l'ai enfin! Voici mon chemin, et j'espère que cela pourra vous aider :)

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

Je ne sais pas pourquoi je dois les installer, mais cela fonctionne sur mon ordinateur. Lorsque vous avez terminé d'installer ces packages, il est temps d'essayer. Oh oui, j'ai besoin de te le dire. Cette fois , quand vous voulez compiler votre code, vous devez ajouter -m32après gcc, par exemple: gcc -m32 -o hello helloworld.c. Juste make cleanet makeencore. Bonne chance les amis.

PS: mon environnement est: Ubuntu 14.04 64 bits (Trusty Tahr) et GCC version 4.8.4. J'ai écrit la solution dans mon blog, mais elle est en chinois :-) - Comment compacter le programme 32 bits sous ubuntu14.04 .

Andycoder
la source
C'est probablement évident pour quiconque doit faire cela, mais ne mettez pas le "/" dans l'instruction rm.
keefer
Oui, c'est mon erreur. Je l'ai réparé maintenant. Merci ~ @keefer
andycoder
2
-1: Bien que cela fonctionne, c'est vraiment une mauvaise pratique. Il existe de bien meilleures solutions dans cet article d' AskUbuntu qui ne nécessitent pas l'installation d'anciens référentiels. Cette méthode ne devrait être nécessaire que pour les très vieux paquets binaires. Mais comme vous avez le code source, cette méthode n'est vraiment pas appropriée.
jmiserez
L'archive rare n'est plus disponible sur l'archive ubuntu. J'ai changé l'archive ardente pour l'archive précise. Le paquet ia32-libs va s'installer maintenant.
Zhenya le
-1 pour moi aussi. Vous serez confronté à une tonne de problèmes avec les dépendances provenant de 2 versions. Même si vous supprimez les références par la suite. Tout à fait d'accord avec @jmiserez.
Dolanor
20

Ces bibliothèques alternatives ont fonctionné pour moi:

sudo apt-get update
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
wisbucky
la source
17

J'ai eu le même problème que ci-dessus et Eclipse a suggéré l'installation:

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"   

Lorsque j'ai essayé d'installer ia32-libs, Ubuntu m'a demandé d'installer trois autres packages:

$ 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    

Avec Android Studio et intellij, j'ai également dû installer la version 32 bits de libstdc ++ 6:

sudo apt-get install lib32stdc++6
Bob
la source
Cela me semble la solution, puisque le paquet ia32-libs est obsolète, et ça marche!
daniel souza
C'est lib32z1inestimable
zjk
8

Pour moi, je dois courir

sudo dpkg --add-architecture i386

avant d'exécuter la réponse de Mike Tang. Sinon, je ne peux pas installer ia32-libs.

fkpwolf
la source
4

Installez simplement la version 32 bits du programme au lieu de la version 64 bits.

C'est beaucoup plus sûr que d'installer des packages qui ne sont pas destinés à la distribution actuelle.

J'ai eu cette suggestion dans les instructions d'installation de Google Earth pour Ubuntu 14.04 . Google Earth utilisait ia32-libssous Ubuntu 12.04 64 bits.

Citant webupd8.org :

Le package ia32-libs n'est plus disponible dans Ubuntu, à partir d'Ubuntu 13.10. Le package a été remplacé par le support multiarch, donc vous n'en avez plus besoin, mais certains packages 64 bits (qui sont en fait des applications 32 bits) dépendent toujours de ce package et à cause de cela, ils ne peuvent pas être installés dans Ubuntu 14.04 ou 13.10, 64 bits. [...]

Le «correctif» ou plus précisément la manière correcte d'installer ces applications qui dépendent de ia32-libs est d'installer simplement le paquet 32 ​​bits sur Ubuntu 64 bits. Bien sûr, cela installera pas mal de packages 32 bits, mais c'est ainsi que fonctionne le multiarch.

Le problème avec certains programmes (comme Google Earth) est que le package 32 bits ne prend pas en charge le multiarch. Par conséquent, certaines dépendances 32 bits doivent être installées manuellement pour que la version 32 bits du programme s'exécute sur Ubuntu 64 bits.

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
la source
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

Si vous êtes en Chine, vous pouvez modifier «raring» en «précis» (pour Ubuntu 13.04 (Raring Ringtail) et Ubuntu 12.04 LTS (Precise Pangolin) , respectivement). J'ai installé Beyond Compare sur Ubuntu 14.04 (Trusty Tahr).

user3999490
la source
1

Le problème est que dans de nombreux cas, les packages sont déjà multiarchives, donc le package i386 n'est pas disponible, mais les autres packages dépendent toujours du package i386 uniquement. C'est un problème dans le référentiel, et les gestionnaires des dépôts devraient le corriger

Rand McRanderson
la source
0

Une solution consiste à ajouter la méthode de paquet Debian correspondante à votre référentiel. Pour cela, tapez les commandes ci-dessous:

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 première ligne écrit à la fin du sources.listfichier la manière du package. Cela fonctionne pour moi. Je souhaite que cela vous aide.

bbruno5
la source
deb ftp: / / ftp. nous .. etc., ça marche, mais ça n'a pas résolu mon problème (
waza123