Como instalar ia32-libs no Ubuntu 14.04 LTS (Trusty Tahr)

115

Eu instalei o Ubuntu 14.04 (Trusty Tahr) ontem. Tudo parece bem. Mas quando tentei compilar algum código C, encontrei o seguinte erro. O erro parece ser devido à falta de suporte à arquitetura de 32 bits do sistema operacional. A saída de erro é a seguinte:

/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

Eu costumava apt-get install ia32-libsusar o Ubuntu 12.04 (Precise Pangolin). Mas o que eu sei é que o Ubuntu removeu as ia32-libs desde o Ubuntu 13.10 (Saucy Salamander). Como posso resolver este problema?

andycoder
fonte
Verifique as informações multiarch do Ubuntu. Você pode anexar: i386 a um nome de pacote para instalar a versão de 32 bits dele.
TeTeT
1
Eu tenho exatamente este problema, eu preciso do ia32-libs para rodar o cliente Fortinet vpn, funcionou perfeitamente em 10.04 LTS e 12.04 LTS. Eu tentei 'sudo apt-get install ia32-libs: i386' mas não funciona, eu também instalei os pacotes 'lib32z1 lib32ncurses5 lib32bz2-1.0' mas eles não funcionam.
javaPhobic
@javaPhobic Decidi instalar o ubuntu12.04 (32 bits). Sobre minha pergunta, tenho algumas respostas. Elas não são minhas chaves, mas podem ajudar você. 1. você pode tentar make clean e então criar seu código novamente. 2. você pode tentar instalar ia32-libs inteiras, assim como a resposta de Mike Tang. 3. Você pode tentar adicionar `` -m32` quando bússola seu código, por exemplo: gcc -m32 helloworld.c. Boa sorte.
andycoder
Isso realmente deveria estar na falha do servidor.
AStopher
2
Estou votando para fechar esta questão como fora do tópico porque é sobre a localização de bibliotecas para Linux. Embora tangencialmente sobre programação, a solução será mais uma resposta de configuração do Linux, não de programação.
BradleyDotNET

Respostas:

140

Você pode tentar isso para instalar a biblioteca de 32 bits (nem todos em ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 pode ser necessário (se você nunca o executou).


Ou se você quiser instalar o ia32-lib inteiro, tente a seguinte ordem:

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: Desta forma, você pode instalar ia32-libs. No entanto, adicionamos a fonte 13.04, portanto, pode haver algum problema desconhecido. Depois de instalar ia32-libs, eu recomendo que você remova o ia32-libs-raring.listin /etc/apt/sources.list.de faça sudo apt-get update.


Se você deseja corrigir a dependência do Android SDK, pode tentar o seguinte:

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

MikeCoder
fonte
3
E: O pacote 'ia32-libs' não tem nenhum candidato a instalação
ThatAintWorking
2
Não consegui acessar archive.ubuntu.com. Lotes de não encontrado enquanto apt-get update. Então mudei a fonte do pacote para deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Agora funciona.
Tim Wu
3
O arquivo raro não está mais disponível no arquivo do Ubuntu. Mudei o arquivo raring pelo arquivo preciso. O pacote ia32-libs será instalado agora.
Martijn Burger
Não funciona em 14.04. A solução que funciona para mim é a resposta de Aleksei.
joelparkerhenderson
1
a segunda linha é echo "deb old-releases.ubuntu.com/ubuntu raring main restricted universe multiverse"> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen
77

Instale a biblioteca múltipla do gcc.

sudo apt-get install gcc-multilib
Nelson Chen
fonte
2
Este meta pacote gcc-multilib em 14.04 é o substituto mais próximo para o meta pacote ia32-libs que estava em 12.04 que encontrei até agora, mas ainda não satisfaz as dependências de pacote explicitamente definidas para ia32-libs .
quickthyme
7
Não posso votar a favor do suficiente. Isso e libstdc++6-4.7-dev:i386é necessário para extrair as máquinas virtuais do Internet Explorer de www.modern.ie
Tek
isso ainda funciona no Ubuntu 16.04 (mas não sei quão completo está)
Peter
Eu também tive que:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin
56

A melhor resposta que já vi é como executar aplicativos de 32 bits no 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
fonte
2
Foi totalmente um problema com meu adb (embalado com clockworkmod de carbono / hélio). Obrigado pela resposta que foi exata para o meu problema (talvez não seja problema de OP, embora ^^). E, de qualquer maneira, essa resposta me parece mais limpa. Sem adicionar o link do repositório da versão anterior do ubuntu, o que criará uma grande bagunça depois disso, tenho certeza ...
Dolanor
1
Isso também funcionou para mim, onde obtive o inútil (e quase nenhum resultado do Google também, então ore para que isso seja indexado) erro "ao carregar bibliotecas compartilhadas: libncurses.so.5". Obrigado!
Honoki
ótima resposta para Ubuntu 14.04, mas não funciona em 16.04
Peter
29

Finalmente consegui! Aqui está o meu caminho e espero que possa ajudá-lo :)

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

Não sei por que preciso instalar isso, mas funciona no meu computador. Quando terminar de instalar esses pacotes, é hora de tentar. Oh sim, eu preciso te dizer. Desta vez, quando você quer compilar seu código, você deve adicionar -m32após gcc, por exemplo: gcc -m32 -o hello helloworld.c. Uma make cleane makeoutra vez. Boa sorte, amigos.

PS: meu ambiente é: Ubuntu 14.04 64 bits (Trusty Tahr) e GCC versão 4.8.4. Eu escrevi a solução no meu blog, mas está em chinês :-) - Como compilar o programa de 32 bits em ubuntu14.04 .

andycoder
fonte
Provavelmente é óbvio para qualquer pessoa que realmente precise fazer isso, mas não coloque o "/" na instrução rm.
goleiro de
Sim, é meu erro. Eu consertei agora. Obrigado ~ @keefer
andycoder
2
-1: Embora isso funcione, é uma prática muito ruim . Existem soluções muito melhores neste post AskUbuntu que não requer a instalação de repositórios antigos. Este método só deve ser necessário para pacotes binários muito antigos. Mas como você tem o código-fonte, esse método não é realmente apropriado.
jmiserez
O arquivo raro não está mais disponível no arquivo do Ubuntu. Mudei o arquivo raring pelo arquivo preciso. O pacote ia32-libs será instalado agora.
Zhenya,
-1 para mim também. Você enfrentará muitos problemas com dependências provenientes de 2 versões. Mesmo que você tenha removido as referências raring posteriormente. Concordo totalmente com @jmiserez.
Dolanor
20

Essas bibliotecas alternativas funcionaram para mim:

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

Tive o mesmo problema acima e o Eclipse sugeriu a instalação:

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 tentei instalar ia32-libs, o Ubuntu solicitou a instalação de três outros pacotes:

$ 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    

Com o Android Studio e o intellij, também tive que instalar a versão de 32 bits do libstdc ++ 6:

sudo apt-get install lib32stdc++6
Prumo
fonte
Esta parece ser a solução para mim, já que o pacote ia32-libs está obsoleto e funciona!
Daniel Souza
Isso lib32z1não tem preço
zjk
8

Para mim tenho que correr

sudo dpkg --add-architecture i386

antes de executar a resposta de Mike Tang. Caso contrário, não consigo instalar ia32-libs.

fkpwolf
fonte
4

Basta instalar a versão de 32 bits do programa, em vez da versão de 64 bits.

Isso é muito mais seguro do que instalar pacotes que não se destinam à distribuição em questão.

Recebi essa sugestão nas instruções de instalação do Google Earth para Ubuntu 14.04 . O Google Earth costumava empregar ia32-libsno Ubuntu 12.04 de 64 bits.

Citando webupd8.org :

O pacote ia32-libs não está mais disponível no Ubuntu, a partir do Ubuntu 13.10. O pacote foi substituído pelo suporte multiarch, então você não precisa mais dele, mas alguns pacotes de 64 bits (que na verdade são aplicativos de 32 bits) ainda dependem desse pacote e, por isso, não podem ser instalados no Ubuntu 14.04 ou 13.10, 64 bits. [...]

A "correção" ou mais especificamente a maneira correta de instalar esses aplicativos que dependem de ia32-libs é simplesmente instalar o pacote de 32 bits no Ubuntu 64 bits. Claro, isso irá instalar alguns pacotes de 32 bits, mas é assim que o multiarch funciona.

O problema com alguns programas (como o Google Earth) é que o pacote de 32 bits não oferece suporte a multiarch. Conseqüentemente, algumas dependências de 32 bits precisam ser instaladas manualmente para que a versão de 32 bits do programa seja executada no 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
fonte
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 você estiver na China, pode modificar "raring" para "preciso" (para Ubuntu 13.04 (Raring Ringtail) e Ubuntu 12.04 LTS (Precise Pangolin) , respectivamente). Eu instalei o Beyond Compare no Ubuntu 14.04 (Trusty Tahr).

user3999490
fonte
1

O problema é que em muitos casos os pacotes já são multiarch, então o pacote i386 não está disponível, mas outros pacotes ainda dependem apenas do pacote i386. Este é um problema no repositório, e os gerentes dos repos devem corrigi-lo

Rand McRanderson
fonte
0

Uma solução é adicionar a forma de pacote Debian correspondente ao seu repositório. Para isso, digite os comandos abaixo:

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

A primeira linha escreve no final do sources.listarquivo da maneira do pacote. Isso funciona para mim. Eu desejo que te ajude.

bbruno5
fonte
deb ftp: // ftp. nós .. etc, funciona, mas não resolveu meu problema (
waza123