如何在Ubuntu 14.04 LTS(Trusty Tahr)中安装ia32-libs


115

我昨天安装了Ubuntu 14.04(Trusty Tahr)。一切似乎都还可以。但是,当我尝试编译一些C代码时,遇到以下错误。该错误似乎是由于操作系统缺少32位体系结构支持所致。错误输出如下:

/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

apt-get install ia32-libs曾经使用过Ubuntu 12.04(精确的穿山甲)。但是我知道的是,自Ubuntu 13.10(Saucy Salamander)起,Ubuntu删除了ia32-libs。我该如何解决这个问题?


检查Ubuntu的多体系结构信息。您可以在包名称后附加:i386以安装它的32位版本。
TeTeT

1
我恰好有这个问题,我需要ia32-libs来运行fortinet vpn客户端,它在10.04 LTS和12.04 LTS下完美运行。我尝试了“ sudo apt-get install ia32-libs:i386”,但没有用,我还安装了“ lib32z1 lib32ncurses5 lib32bz2-1.0”软件包,但它们不起作用。
javaPhobic 2014年

@javaPhobic我决定安装ubuntu12.04(32bit)。关于我的问题,我得到了一些答案。它们不是我的钥匙,但可以为您提供帮助。1.您可以尝试清理并重新制作代码。2.您可以尝试安装整个ia32-lib,就像Mike Tang的回答一样。3.您可以在罗经代码时尝试添加“ -m32”,例如:gcc -m32 helloworld.c。祝好运。
andycoder

这确实应该是服务器故障。
AStopher

2
我投票结束这个问题是因为题外,因为它与Linux库的位置有关。尽管编程有关,但解决方案将更多是Linux配置答案,而不是编程答案。
BradleyDotNET

Answers:


140

您可以尝试安装32位库(不是全部在ia32-libs中):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 可能是必需的(如果您从未运行过)。


或者,如果您想安装整个ia32-lib,请尝试以下命令:

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:这样,您可以安装ia32-libs。但是,我们改为添加源代码13.04,因此,可能存在一些未知问题。安装后ia32-libs,建议您删除ia32-libs-raring.listin /etc/apt/sources.list.d并执行sudo apt-get update


如果要修复Android SDK的依赖性,可以尝试以下操作:

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


3
E:软件包“ ia32-libs”没有安装候选对象
ThatAintWorking 2014年

2
我无法访问archive.ubuntu.com。很多未发现的同时apt-get update。因此,我将包源更改为 deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse。现在可以了。
蒂姆·伍

3
在ubuntu归档文件上不再有Racing归档文件。我将稀有档案更改为精确档案。软件包ia32-libs将立即安装。
Martijn Burger 2014年

在14.04上无效。对我有效的解决方案是Aleksei的答案。
joelparkerhenderson 2014年

1
第二行是echo“ deb old-releases.ubuntu.com/ubuntu raring主要受限的宇宙multiverse”> /etc/apt/sources.list.d/ia32-libs-raring.list
Vigen

77

安装gcc多个库。

sudo apt-get install gcc-multilib

2
14.04中的此gcc-multilib meta包是到目前为止我在12.04中的ia32-libs meta包的最直接替代,但仍不能满足显式设置为ia32-libs的包依赖项。 。
quickthyme 2014年

7
无法对此进行足够的投票。这libstdc++6-4.7-dev:i386是从www.modern.ie中提取Internet Explorer虚拟机所必需的
Tek

这仍然可以在Ubuntu 16.04上使用(但是我不知道它有多完善)
Peter

我还必须:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin

56

我见过的最好的答案是如何在Ubuntu 64位上运行32位应用程序?

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

2
我的adb(装有Clockworkmod碳/氦气)完全是一个问题。感谢您回答我的问题(尽管不是^问题,但^^)。无论如何,在我看来,这个答案更清洁。没有添加以前的以前的ubuntu版本存储库链接,我确定之后会造成很大的混乱……
Dolanor 2014年

1
这也帮了我大忙,我得到了无用的错误(也几乎没有Google的任何结果,因此请为它编制索引)错误“加载共享库时出错:libncurses.so.5”。谢谢!
Honoki 2014年

Ubuntu 14.04的好答案,但不适用于16.04
Peter

29

我终于明白了!这是我的方式,希望它能对您有所帮助:)

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

我不知道为什么需要安装它们,但它可以在我的计算机上使用。当您完成安装这些软件包时,就该尝试了。哦,是的,我需要告诉你。这次要编译代码时,应在-m32后面添加gcc,例如:gcc -m32 -o hello helloworld.c。只是make cleanmake试。祝你好运。

PS:我的环境是:Ubuntu 14.04 64位(Trusty Tahr)和GCC版本4.8.4。我已经在博客中写了解决方案,但是它是中文:-)- 如何在ubuntu14.04下进行32bit编程


对于实际上必须执行此操作的任何人来说,这可能很明显,但不要在rm语句中放置“ /”。
keefer

是的,这是我的错误。我已经修复了。谢谢〜@keefer
andycoder

2
-1:虽然这行得通,但这确实是一种不好的做法。这个AskUbuntu帖子中有很多更好的解决方案,不需要安装旧的存储库。仅对于非常旧的二进制软件包,才需要使用此方法。但是,因为有了源代码,所以这种方法确实不合适。
2014年

在ubuntu归档文件上不再有Racing归档文件。我将稀有档案更改为精确档案。软件包ia32-libs将立即安装。

我也为-1。对于来自2个版本的依赖项,您将面临大量问题。即使您随后删除了重要参考。完全同意@jmiserez。
多拉诺2014年

20

这些替代库为我工作:

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

17

我遇到了与上述相同的问题,Eclipse建议安装:

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"   

当我尝试安装ia32-libs时,Ubuntu提示安装其他三个软件包:

$ 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    

使用Android Studio和intellij,我还必须安装32位版本的libstdc ++ 6:

sudo apt-get install lib32stdc++6

这对我来说似乎是解决方案,因为ia32-libs包已过时,并且可以正常工作!
丹尼尔·苏萨

lib32z1是无价的
zjk

8

对我来说,我必须跑步

sudo dpkg --add-architecture i386

在运行Mike Tang的答案之前。否则,我将无法安装ia32-libs。


4

只需安装该程序的32位版本,而不是64位版本。

这比安装不打算分发的软件包要安全得多。

我从Ubuntu 14.04Google Earth安装说明中得到了这个建议。Google Earth曾经ia32-libs在64位Ubuntu 12.04以下使用。

引用webupd8.org

从Ubuntu 13.10开始,ia32-libs软件包在Ubuntu中不再可用。该软件包已被多体系结构支持所取代,因此您不再需要它,但是某些64位软件包(实际上是32位应用程序)仍然依赖于此软件包,因此,它们无法安装在Ubuntu 14.04或13.10中, 64位。[...]

安装依赖于ia32-libs的这些应用程序的“修复”或更确切地说,正确的方法是在Ubuntu 64位上简单地安装32位软件包。当然,这将安装许多32位软件包,但这就是multiarch的工作方式。

某些程序(例如Google Earth)的问题在于32位软件包不支持多体系结构。因此,需要手动安装一些32位依赖项才能使该程序的32位版本在Ubuntu 64位上运行。

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

如果您在中国,则可以将“ raring”修改为“ precise”(分别用于Ubuntu 13.04(Raring Ringtail)和Ubuntu 12.04 LTS(Precise Pangolin))。我在Ubuntu 14.04(Trusty Tahr)上安装了Beyond Compare


1

问题在于,在许多情况下,这些程序包已经是多体系结构的,因此i386程序包不可用,但是其他程序包仍然仅依赖于i386程序包。这是存储库中的问题,存储库的管理者应对其进行修复


0

一种解决方案是将相应的Debian软件包方式添加到您的存储库中。为此,请键入以下命令:

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

第一行在sources.list文件末尾写入打包方式。这对我有用。希望对您有所帮助。


deb ftp:/// ftp。我们..等,这是
可行的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.