Cách cài đặt ia32-libs trong Ubuntu 14.04 LTS (Trusty Tahr)


115

Tôi đã cài đặt Ubuntu 14.04 (Trusty Tahr) ngày hôm qua. Mọi thứ có vẻ ổn. Nhưng khi tôi cố gắng biên dịch một số mã C, tôi gặp phải lỗi sau. Lỗi dường như là do HĐH thiếu hỗ trợ kiến ​​trúc 32 bit. Đầu ra lỗi như sau:

/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

Tôi apt-get install ia32-libsđã từng sử dụng Ubuntu 12.04 (Pangolin chính xác). Nhưng những gì tôi biết là Ubuntu đã loại bỏ ia32-libs kể từ Ubuntu 13.10 (Saucy Salamander). Làm thế nào tôi có thể khắc phục vấn đề này?


Kiểm tra thông tin multiarch cho Ubuntu. Bạn có thể nối thêm: i386 vào tên gói để cài đặt phiên bản 32 bit của nó.
TeTeT

1
Tôi có chính xác vấn đề này, tôi cần ia32-libs để chạy fortpet vpn client, nó hoạt động hoàn hảo dưới 10,04 LTS và 12,04 LTS. Tôi đã thử 'sudo apt-get install ia32-libs: i386' nhưng không hoạt động, tôi cũng đã cài đặt các gói 'lib32z1 lib32ncurses5 lib32bz2-1.0' nhưng chúng không hoạt động.
javaPhobic

@javaPhobic Tôi quyết định cài đặt ubfox12.04 (32 bit). Về câu hỏi của tôi, tôi đã có một số câu trả lời. Chúng không phải là chìa khóa của tôi, nhưng có thể giúp bạn. 1. bạn có thể thử làm cho sạch sau đó làm lại mã của bạn. 2. bạn có thể thử cài đặt toàn bộ ia32-libs, giống như câu trả lời của Mike Tang. 3. bạn có thể thử thêm `` -m32` khi bạn la bàn mã của mình, ví dụ : gcc -m32 helloworld.c. Chúc may mắn.
andycoder

Điều này thực sự nên có trên Server Fault.
AStopher 19/2/2015

2
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì đó là về vị trí của các thư viện cho linux. Trong khi tiếp tuyến về lập trình, giải pháp sẽ là câu trả lời cấu hình linux, không phải là lập trình.
BradleyDotNET

Câu trả lời:


140

Bạn có thể thử cách này để cài đặt thư viện 32 bit (không phải tất cả trong ia32-libs):

sudo  apt-get install program:i386

sudo dpkg --add-architecture i386 có thể được yêu cầu (nếu bạn chưa từng chạy nó).


Hoặc nếu bạn muốn cài đặt toàn bộ ia32-lib thay vào đó, hãy thử theo thứ tự sau:

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: Bằng cách này, bạn có thể cài đặt ia32-libs. Tuy nhiên, chúng tôi thêm nguồn 13.04 thay vào đó, vì vậy, có thể có một số vấn đề chưa biết. Sau khi cài đặt ia32-libs, tôi khuyên bạn nên loại bỏ các ia32-libs-raring.listtrong /etc/apt/sources.list.d, và làm sudo apt-get update.


Nếu bạn muốn khắc phục sự phụ thuộc của SDK Android, bạn có thể thử dưới đây:

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


3
E: Gói 'ia32-libs' không có ứng cử viên cài đặt
ThatAintWorking

2
Tôi không thể truy cập archive.ubfox.com. Rất nhiều không tìm thấy trong khi apt-get update. Vì vậy, tôi đã thay đổi nguồn gói thành deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multi verse. Bây giờ nó hoạt động.
Tim Wu

3
Kho lưu trữ không còn có sẵn trên kho lưu trữ ubfox nữa. Tôi đã thay đổi kho lưu trữ hiếm cho kho lưu trữ chính xác. Gói ia32-libs sẽ cài đặt ngay bây giờ.
Burger Martijn

Không hoạt động vào ngày 14.04. Giải pháp phù hợp với tôi là câu trả lời của Aleksei.
joelparkerhenderson

1
dòng thứ hai là echo "deb old-release.ub Ubuntu.com/ubfox hiếm vũ trụ chính bị giới hạn đa vũ trụ"> /etc/apt/source.list.d/ia32-libs-rared.list
Vigen

77

Cài đặt gcc nhiều thư viện.

sudo apt-get install gcc-multilib

2
Gói meta gcc-multilib trong 14.04 này là gói thay thế thả xuống gần nhất cho gói meta ia32-libs trong 12.04 mà tôi đã gặp cho đến nay, nhưng nó vẫn không đáp ứng các phụ thuộc gói được đặt rõ ràng thành ia32-libs .
quickthyme

7
Không thể nâng cao điều này đủ. Điều này và libstdc++6-4.7-dev:i386được yêu cầu để trích xuất các máy ảo Internet Explorer từ www.modern.ie
Tek

cái này vẫn hoạt động trên Ubuntu 16.04 (nhưng tôi không biết nó hoàn thiện đến mức nào)
Peter

Tôi cũng đã phải:sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mike Godin

56

Câu trả lời hay nhất tôi từng thấy là Làm thế nào để chạy các ứng dụng 32 bit trên 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
Đó hoàn toàn là một vấn đề với adb của tôi (chứa đầy carbon / helium clockworkmod). Cảm ơn câu trả lời đó là vấn đề của tôi (mặc dù có thể không phải là vấn đề OP). Và dù sao, câu trả lời này đối với tôi là sạch hơn. Không thêm liên kết kho lưu trữ phiên bản Ubuntu trước đó, điều này sẽ tạo ra một mớ hỗn độn lớn sau đó tôi chắc chắn rằng
Dolanor

1
Điều này cũng đã tạo ra mánh khóe cho tôi, nơi tôi nhận được kết quả không hữu ích (và hầu như không có kết quả nào của Google, vì vậy hãy cầu nguyện điều này được lập chỉ mục) lỗi "trong khi tải các thư viện chia sẻ: libncurses.so.5". Cảm ơn!
Honoki

câu trả lời tuyệt vời cho Ubuntu 14.04 nhưng không hoạt động vào ngày 16.04
Peter

29

Tôi đã nhận được nó cuối cùng! Đây là cách của tôi, và tôi hy vọng nó có thể giúp bạn :)

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

Tôi không biết lý do tại sao tôi cần cài đặt những thứ này, nhưng nó hoạt động trên máy tính của tôi. Khi bạn hoàn tất cài đặt các gói này, đã đến lúc thử. Ồ vâng, tôi cần nói với bạn. Lần này khi bạn muốn biên dịch mã của mình, bạn nên thêm -m32vào sau gcc, ví dụ : gcc -m32 -o hello helloworld.c. Chỉ make cleanmakemột lần nữa. Chúc các bạn may mắn.

PS: môi trường của tôi là: Ubuntu 14.04 64-bit (Trusty Tahr) và GCC phiên bản 4.8.4. Tôi đã viết giải pháp trên blog của mình, nhưng nó bằng tiếng Trung Quốc :-) - Cách la bàn chương trình 32 bit theo ubfox14.04 .


Bất cứ ai thực sự phải làm điều này có thể rõ ràng, nhưng đừng đặt "/" trong câu lệnh rm.
keefer

Vâng, đó là sai lầm của tôi. Tôi đã sửa nó bây giờ. Cảm ơn bạn ~ @keefer
andycoder

2
-1: Trong khi điều này hoạt động, nó thực sựthực tế xấu . Có nhiều giải pháp tốt hơn trong bài đăng trên AskUbfox này không yêu cầu cài đặt các kho lưu trữ cũ. Phương pháp này chỉ cần thiết cho các gói nhị phân rất cũ. Nhưng khi bạn có mã nguồn, phương pháp này thực sự không phù hợp.
jmiserez

Kho lưu trữ không còn có sẵn trên kho lưu trữ ubfox nữa. Tôi đã thay đổi kho lưu trữ hiếm cho kho lưu trữ chính xác. Gói ia32-libs sẽ cài đặt ngay bây giờ.
Zhenya

-1 đối với tôi cũng vậy. Bạn sẽ phải đối mặt với vô số vấn đề với sự phụ thuộc đến từ 2 phiên bản. Ngay cả khi bạn loại bỏ các tài liệu tham khảo hiếm sau đó. Hoàn toàn đồng ý với @jmiserez.
Dolanor

20

Những thư viện thay thế làm việc cho tôi:

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

17

Tôi đã có cùng một vấn đề như trên và Eclipse đề nghị cài đặt:

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"   

Khi tôi cố cài đặt ia32-libs, Ubuntu đã nhắc cài đặt ba gói khác:

$ 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    

Với Android Studio và intellij, tôi cũng đã phải cài đặt phiên bản libstdc ++ 6:

sudo apt-get install lib32stdc++6

Đây có vẻ là giải pháp cho tôi, vì gói ia32-libs đã lỗi thời và nó hoạt động!
daniel souza 3/03/2015

Điều này lib32z1là vô giá
zjk

8

Đối với tôi, tôi phải chạy

sudo dpkg --add-architecture i386

trước khi chạy câu trả lời của Mike Tang. Nếu không, tôi không thể cài đặt ia32-libs.


4

Chỉ cần cài đặt phiên bản 32 bit của chương trình, thay vì phiên bản 64 bit.

Điều này an toàn hơn nhiều so với việc cài đặt các gói không dành cho phân phối trong tay.

Tôi đã nhận được đề xuất này từ hướng dẫn cài đặt Google Earth cho Ubuntu 14.04 . Google Earth được sử dụng để sử dụngia32-libs Ubuntu 12.04 64 bit.

Trích dẫn webupd8.org :

Gói ia32-libs không còn có sẵn trong Ubuntu, bắt đầu với Ubuntu 13.10. Gói được thay thế bởi hỗ trợ multiarch vì vậy bạn không cần thêm nữa, nhưng một số gói 64 bit (thực sự là các ứng dụng 32 bit) vẫn phụ thuộc vào gói này và vì điều này, chúng không thể được cài đặt trong Ubuntu 14.04 hoặc 13.10, 64 bit. [...]

"Khắc phục" hay cụ thể hơn là cách cài đặt chính xác các ứng dụng này phụ thuộc vào ia32-libs là chỉ cần cài đặt gói 32 bit trên Ubuntu 64 bit. Tất nhiên, điều đó sẽ cài đặt khá nhiều gói 32 bit, nhưng đó là cách multiarch hoạt động.

Vấn đề với một số chương trình (như Google Earth) là gói 32 bit không hỗ trợ multiarch. Do đó, một số phụ thuộc 32 bit cần được cài đặt thủ công để làm cho phiên bản 32 bit của chương trình chạy trên Ubuntu 64 bit.

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

Nếu bạn ở Trung Quốc, bạn có thể sửa đổi "raring" thành "chính xác" (đối với Ubuntu 13.04 (Ringing Ringing) và Ubuntu 12.04 LTS (Pangolin chính xác) , tương ứng). Tôi đã cài đặt Beyond So sánh trên Ubuntu 14.04 (Trusty Tahr).


1

Vấn đề là trong nhiều trường hợp các gói đã có nhiều gói nên gói i386 không khả dụng, nhưng các gói khác vẫn chỉ phụ thuộc vào gói i386. Đây là một vấn đề trong kho lưu trữ và người quản lý của repos nên khắc phục nó


0

Một giải pháp là thêm cách gói Debian tương ứng vào kho lưu trữ của bạn. Đối với điều này, gõ các lệnh dưới đây:

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

Dòng đầu tiên ghi vào cuối sources.listtập tin theo cách gói. Điều này làm việc cho tôi. Tôi muốn điều đó giúp bạn.


deb ftp: / / ftp. chúng tôi .. vv, nó hoạt động, nhưng không giải quyết được vấn đề của tôi (
waza123
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.