2014-04-20 76 views
111

昨天我安装了Ubuntu 14.04(Trusty Tahr)。一切似乎都很好。但是当我试图编译一些C代码时,遇到以下错误。该错误似乎是由于操作系统缺乏32位体系结构支持。误差输出是如下:如何在Ubuntu 14.04 LTS(Trusty Tahr)中安装ia32-libs

/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 Ubuntu   13.10(Saucy Salamander)以来,Ubuntu已经移除了ia32-libs。我该如何解决这个问题?

+0

检查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

+0

@javaPhobic我决定安装ubuntu12.04(32位)。关于我的问题,我有一些答案。他们不是我的钥匙,但可能会帮助你。 1.你可以尝试让清洁,然后再次使你的代码。 2.你可以尝试安装整个ia32-libs,就像Mike Tang的答案一样。 3.您可以在指定代码时尝试添加'-m32',例如:'gcc -m32 helloworld.c'。祝你好运。 – andycoder

回答

138

你可以试试这个安装32位的库(不是所有IA32-库):

apt-get install program: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.list,/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:Package'ia32-libs'没有安装候选 – ThatAintWorking

+2

我无法访问archive.ubuntu.com。很多_not found_而'apt-get update'。所以我将包源更改为'deb http://old-releases.ubuntu.com/ubuntu/ raring主限制宇宙多 verse'。现在它可以工作。 –

+3

Raring档案在ubuntu档案库中不再可用。我更改了精确归档的raring归档。软件包ia32-libs将立即安装。 –

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 

我不知道为什么我需要安装这些,但它的作品在我的电脑上。当你完成安装这些软件包时,是时候尝试了。哦,是的,我需要告诉你。这次当你想编译你的代码时,你应该在gcc之后加-m32,例如:gcc -m32 -o hello helloworld.c。再次只需要make cleanmake。祝你好运的朋友。

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

+0

对于任何需要这样做的人来说,这可能是很明显的,但不要将“/”放在rm语句中。 – keefer

+0

是的,这是我的错误。我现在修好了。谢谢〜@keefer – andycoder

+2

-1:虽然这个工程,它是**真的很糟糕**的做法。在[AskUbuntu文章](http://askubuntu.com/q/107230/145754)中有很多更好的解决方案,它们不需要安装旧版本库。这种方法只适用于非常旧的二进制包。但是,如果您有源代码,则此方法实际上并不合适。 – jmiserez

5

对于我来说,我已经跑了正确的答案之前运行

sudo dpkg --add-architecture i386 

。否则,我无法安装ia32-libs。

73

安装gcc多库。

sudo apt-get install gcc-multilib 
+2

14.04中的这个gcc-multilib元数据包是迄今为止我遇到的12.04中最接近的ia32-libs元数据包的替代品,但它仍不满足明确设置为ia32-库。 – quickthyme

+7

不能满足这个要求。这需要'libstdC++ 6-4.7-dev:i386'来从www.modern.ie中提取Internet Explorer虚拟机 – Tek

+0

这仍然适用于Ubuntu 16.04(但我不知道它有多完整) – Peter

4

只需安装程序的32位版本,代替64位版本。

这比安装不打算用于手头分发的软件包安全得多。

我从Google Earth installation instructions for Ubuntu 14.04得到了这个建议。 Google地球曾经在64位Ubuntu 12.04下采用ia32-libs

引用webupd8.org

的IA32-库包不再可用在Ubuntu,开始与 Ubuntu的13.10。该软件包已被多种文件支持所取代,因此您不再需要它,但一些64位软件包(实际上是 32位应用程序)仍然依赖于此软件包,因此, 无法安装在Ubuntu 14.04中或13.10,64位。 [...]

“修复”或更具体地安装这些 应用依赖于IA32-库是简单地在Ubuntu 64安装32位包 的正确方法。当然,这将安装相当多的32bit 软件包,但这就是多元化的工作原理。

一些程序(如谷歌地球)的问题是,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 
1

的问题是,在许多情况下,这些软件包multiarch已经使i386的包装不可用,但其他包仍然依赖于仅在i386包。这是在库中的问题,而回购的管理者应该修复它

20

这些替代库工作对我来说:

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

我所见过的最好的答案是How to run 32-bit applications on Ubuntu 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

这是完全问题与我的adb(与clockworkmod碳/氦包装)。感谢那对我的问题的答案(可能不是OP问题,虽然^^)。无论如何,这个答案在我看来是更清洁的。没有添加以前以前的Ubuntu版本库链接,这将创建一个大混乱后,我敢肯定... – Dolanor

+1

这也为我做了诡计,我得到了无益(几乎没有谷歌的结果,所以祈祷这得到索引)错误“加载共享库时出错:libncurses.so.5”。谢谢! – Honoki

+0

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

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”为“精确”(对于Ubuntu 13.04(Raring Ringtail)a nd Ubuntu 12.04 LTS (Precise Pangolin))。我在Ubuntu上安装了Beyond Compare   14.04(Trusty Tahr)。

16

我有同样的问题如上和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-库,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工作室和intellij,我也必须安装32位版本的libstdC++ 6:

sudo apt-get install lib32stdc++6 
+0

这似乎是我的解决方案,因为包ia32-libs已经过时了,而且它的工作原理! –

+0

这个'lib32z1'是无价的 – zjk

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文件的包方式的端部写入。 这适用于我。我希望这可以帮助你。

+0

deb f t p://f t p。我的..等等,它的工作原理,但没有解决我的问题( – waza123