Cómo instalar ia32-libs en Ubuntu 14.04 LTS (Trusty Tahr)

115

Instalé Ubuntu 14.04 (Trusty Tahr) ayer. Todo parece estar bien. Pero cuando intenté compilar código C, me encontré con el siguiente error. El error parece deberse a que el sistema operativo carece de compatibilidad con la arquitectura de 32 bits. La salida de error es la siguiente:

/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

Solía ​​hacerlo apt-get install ia32-libscuando usaba Ubuntu 12.04 (Precise Pangolin). Pero lo que sé es que Ubuntu ha eliminado ia32-libs desde Ubuntu 13.10 (Saucy Salamander). ¿Como puedo solucionar este problema?

andycoder
fuente
Verifique la información multiarca para Ubuntu. Puede agregar: i386 al nombre de un paquete para instalar la versión de 32 bits.
TeTeT
1
Tengo exactamente este problema, necesito ia32-libs para ejecutar el cliente vpn de fortinet, funcionó perfectamente en 10.04 LTS y 12.04 LTS. Intenté 'sudo apt-get install ia32-libs: i386' pero no funciona, también instalé los paquetes 'lib32z1 lib32ncurses5 lib32bz2-1.0' pero no funcionan.
javaPhobic
@javaPhobic Decido instalar ubuntu12.04 (32bit). Sobre mi pregunta, tengo algunas respuestas. No son mis llaves, pero pueden ayudarte. 1. Puede intentar limpiar y luego hacer su código nuevamente. 2. Puede intentar instalar ia32-libs enteras, como la respuesta de Mike Tang. 3. se puede tratar de añadir `` -m32` cuando rodeáis su código, por ejemplo: gcc -m32 helloworld.c. Buena suerte.
andycoder
Esto realmente debería estar en Server Fault.
AStopher
2
Estoy votando para cerrar esta pregunta como fuera de tema porque se trata de la ubicación de las bibliotecas para Linux. Si bien se trata tangencialmente de programación, la solución será más una respuesta de configuración de Linux, no una de programación.
BradleyDotNET

Respuestas:

140

Puede probar esto para instalar la biblioteca de 32 bits (no todos en ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 puede ser necesario (si nunca lo ha ejecutado).


O si desea instalar el ia32-lib completo en su lugar, intente el siguiente orden:

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

PD: De esta manera, puedes instalar ia32-libs. Sin embargo, en su lugar, agregamos la fuente de 13.04, por lo que puede haber algún problema desconocido. Después de la instalación ia32-libs, te recomiendo que quites el ia32-libs-raring.listin /etc/apt/sources.list.dy lo hagas sudo apt-get update.


Si desea corregir la dependencia del SDK de Android, puede probar lo siguiente:

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

MikeCoder
fuente
3
E: El paquete 'ia32-libs' no tiene candidato de instalación
ThatAintWorking
2
No pude acceder a archive.ubuntu.com. Muchos no encontrados mientras apt-get update. Así que cambié la fuente del paquete a deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Ahora funciona.
Tim Wu
3
El archivo Raring ya no está disponible en el archivo de ubuntu. Cambié el archivo inusual por el archivo preciso. El paquete ia32-libs se instalará ahora.
Martijn Burger
No funciona en 14.04. La solución que me funciona es la respuesta de Aleksei.
joelparkerhenderson
1
la segunda línea es echo "deb old-releases.ubuntu.com/ubuntu raring principal universo restringido multiverso"> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen
77

Instale la biblioteca múltiple gcc.

sudo apt-get install gcc-multilib
Nelson Chen
fuente
2
Este metapaquete gcc-multilib en 14.04 es el reemplazo directo más cercano para el metapaquete ia32-libs que estaba en 12.04 que he encontrado hasta ahora, pero aún no satisface las dependencias del paquete que están explícitamente configuradas en ia32-libs .
quickthyme
7
No puedo votar esto lo suficiente. Esto y libstdc++6-4.7-dev:i386es necesario para extraer las máquinas virtuales de Internet Explorer de www.modern.ie
Tek
esto todavía funciona en Ubuntu 16.04 (pero no sé qué tan completo es)
Peter
También tuve que:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin
56

La mejor respuesta que he visto es ¿Cómo ejecutar aplicaciones de 32 bits en Ubuntu de 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
fuente
2
Fue totalmente un problema con mi adb (repleto de carbono / helio de clockworkmod). Gracias por esa respuesta que fue acertada para mi problema (aunque tal vez no sea un problema de OP ^^). Y de todos modos, esta respuesta me parece la más limpia. No hay que agregar el enlace del repositorio de la versión anterior de ubuntu, lo que creará un gran lío después, estoy seguro ...
Dolanor
1
Esto también funcionó para mí, donde obtuve el inútil (y casi ningún resultado de Google también, así que reza para que esto se indexe) error "al cargar bibliotecas compartidas: libncurses.so.5". ¡Gracias!
Honoki
gran respuesta para Ubuntu 14.04 pero no funciona en 16.04
Peter
29

¡Finalmente lo tengo! Este es mi camino y espero que pueda ayudarte :)

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

No sé la razón por la que necesito instalarlos, pero funciona en mi computadora. Cuando termine de instalar estos paquetes, es hora de intentarlo. Oh, sí, necesito decirte. Esta vez, cuando se desea compilar el código, debe agregar -m32después gcc, por ejemplo: gcc -m32 -o hello helloworld.c. Una make cleany makeotra vez. Buena suerte amigos.

PD: mi entorno es: Ubuntu 14.04 de 64 bits (Trusty Tahr) y GCC versión 4.8.4. He escrito la solución en mi blog, pero está en chino :-) - Cómo compás un programa de 32 bits en ubuntu14.04 .

andycoder
fuente
Probablemente sea obvio para cualquiera que tenga que hacer esto, pero no ponga "/" en la instrucción rm.
keefer
Si, es mi error. Lo he arreglado ahora. Gracias ~ @keefer
andycoder
2
-1: Si bien esto funciona, es una mala práctica. Hay soluciones mucho mejores en esta publicación de AskUbuntu que no requieren la instalación de repositorios antiguos. Este método solo debería ser necesario para paquetes binarios muy antiguos. Pero como tiene el código fuente, este método realmente no es apropiado.
jmiserez
El archivo Raring ya no está disponible en el archivo de ubuntu. Cambié el archivo inusual por el archivo preciso. El paquete ia32-libs se instalará ahora.
Zhenya
-1 para mí también. Te enfrentarás a un montón de problemas con las dependencias provenientes de 2 versiones. Incluso si eliminó las referencias raras después. Totalmente de acuerdo con @jmiserez.
Dolanor
20

Estas bibliotecas alternativas funcionaron para mí:

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

Tuve el mismo problema que el anterior y Eclipse sugirió instalar:

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"   

Cuando intenté instalar ia32-libs, Ubuntu me pidió que instalara otros tres paquetes:

$ 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, también tuve que instalar la versión de 32 bits de libstdc ++ 6:

sudo apt-get install lib32stdc++6
Beto
fuente
Esta parece la solución para mí, ya que el paquete ia32-libs está obsoleto y ¡funciona!
Daniel Souza
Esto lib32z1no tiene precio
zjk
8

Para mi tengo que correr

sudo dpkg --add-architecture i386

antes de ejecutar la respuesta de Mike Tang. De lo contrario, no puedo instalar ia32-libs.

fkpwolf
fuente
4

Simplemente instale la versión de 32 bits del programa, lugar de la versión de 64 bits.

Esto es mucho más seguro que instalar paquetes que no están pensados ​​para la distribución en cuestión.

Recibí esta sugerencia de las instrucciones de instalación de Google Earth para Ubuntu 14.04 . Google Earth solía emplearia32-libs Ubuntu 12.04 de 64 bits.

Citando webupd8.org :

El paquete ia32-libs ya no está disponible en Ubuntu, a partir de Ubuntu 13.10. El paquete fue reemplazado por el soporte multiarch, por lo que ya no lo necesita, pero algunos paquetes de 64 bits (que en realidad son aplicaciones de 32 bits) aún dependen de este paquete y, por lo tanto, no se pueden instalar en Ubuntu 14.04 o 13.10. 64 bits. [...]

La "solución" o más específicamente la forma correcta de instalar estas aplicaciones que dependen de ia32-libs es simplemente instalar el paquete de 32 bits en Ubuntu de 64 bits. Por supuesto, eso instalará bastantes paquetes de 32 bits, pero así es como funciona multiarch.

El problema con algunos programas (como Google Earth) es que el paquete de 32 bits no es compatible con multiarch. En consecuencia, algunas dependencias de 32 bits deben instalarse manualmente para que la versión de 32 bits del programa se ejecute en Ubuntu de 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
fuente
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 estás en China, puedes modificar "raring" a "preciso" (para Ubuntu 13.04 (Raring Ringtail) y Ubuntu 12.04 LTS (Precise Pangolin) , respectivamente). Instalé Beyond Compare en Ubuntu 14.04 (Trusty Tahr).

usuario3999490
fuente
1

El problema es que en muchos casos los paquetes ya son multiarch, por lo que el paquete i386 no está disponible, pero otros paquetes aún dependen solo del paquete i386. Este es un problema en el repositorio, y los administradores de los repositorios deberían solucionarlo.

Rand McRanderson
fuente
0

Una solución es agregar el paquete Debian correspondiente a su repositorio. Para esto, escriba los siguientes comandos:

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 primera línea escribe al final del sources.listarchivo la forma del paquete. Esto funciona para mi. Deseo que eso te ayude.

bbruno5
fuente
deb ftp: / / ftp. nosotros ... etc, funciona, pero no resolvió mi problema (
waza123