Làm thế nào để bạn chạy một chương trình 32 bit trên phiên bản Ubuntu 64 bit?


41

Tôi có phiên bản 64 bit của Ubuntu 13.10. Tôi muốn chạy phiên bản 32 bit của chương trình. Tuy nhiên tôi thấy ia32-libskhông được bao gồm trong 13.10. Có một gói thay thế cho điều này hay những gì?


1

@bain Đây không phải là bản sao. Câu hỏi này là về các tình huống chung, đó là một vấn đề cụ thể, chưa kể đây là câu hỏi cũ hơn, tốt hơn.
Seth

Và câu trả lời của Braiam thật tuyệt vời ! Vì vậy, nếu nó bị lừa ở bất cứ nơi nào thì nó nên được hợp nhất.
Mateo

Câu trả lời:


30

Không cần ia32-libsgói nữa (kể từ ngày 12.04), nếu bạn sử dụng hệ thống APT, bạn không có gì phải lo lắng về việc cài đặt các gói 32 bit trong hệ thống 64 bit. Điều này xảy ra kể từ khi giới thiệu multiarch , một trong những chính sách thay đổi trò chơi nhất của Debian theo cách Debian quản lý các phụ thuộc của nó. Phương pháp này cho phép có các mục tiêu nhị phân khác nhau trong cùng một hệ thống mà không cần quan tâm đến kiến ​​trúc kernel. Điều này không có nghĩa là bạn có thể chạy bất kỳ gói 32 bit nào mà không cần chuẩn bị, nhưng nếu bạn cài đặt các thư viện / tệp nhị phân thì bất kỳ ứng dụng nào trên lý thuyết đều có thể chạy được. Điều này đúng từ 64 bit đến 32 bit và ngược lại.

nhập mô tả hình ảnh ở đây

Để sử dụng phương pháp như vậy được khuyến nghị sử dụng các trình quản lý APT, để ngăn chặn các phụ thuộc chưa được đáp ứng. Thay đổi bao gồm một lịch sử nhỏ về cách thay đổi được thực hiện:

  1. Chính xác là gói đã được làm trống và thực hiện một gói chuyển tiếp . Nó đã được thêm một số phụ thuộc vào các gói chưa được chuyển sang multiarch.
  2. Dần dần nhưng chắc chắn, tất cả các gói đã được xây dựng lại với sự hỗ trợ của multiarch và các phụ thuộc ngược đã bị loại bỏ hoặc thay đổi thành ia32-lib-multiarch. Khi các gói này ngừng cần các gói ia34-libs, các phụ thuộc đã bị loại bỏ cùng một lúc. Sự phụ thuộc đã được thay đổi từ ia32-libsđến package:archpackagetên của thư viện cần thiết và archkiến trúc (sau đây có là một ví dụ với skype).
  3. Với bản phát hành cuối cùng , ia32-libs-multiarchgói đã bị xóa khỏi các bản phát hành trước đó và ia32-libskhông được xuất bản thành saucy. Tất cả các gói Ubuntu đều có khả năng multiarch và bạn có thể cài đặt các gói kiến ​​trúc khác nhau trong hệ thống của mình.

Bây giờ, khi cài đặt gói cần nhị phân 32 bit, nếu bạn không chú ý, bạn sẽ không bao giờ biết rằng mình đang sử dụng gói 32 bit, vì trình quản lý gói sẽ tự động lấy các phụ thuộc cần thiết:

sudo apt-get --no-install-recommends -q -y install skype
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libaudio2:i386 libjbig0:i386 liblcms1:i386 libmng1:i386 libqt4-dbus:i386 libqt4-declarative:i386
  libqt4-network:i386 libqt4-opengl:i386 libqt4-script:i386 libqt4-sql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libssl1.0.0:i386 libtiff5:i386
  libxss1:i386 libxv1:i386 skype-bin:i386
Suggested packages:
  nas:i386 liblcms-utils:i386 libqt4-declarative-folderlistmodel:i386 libqt4-declarative-gestures:i386
  libqt4-declarative-particles:i386 libqt4-declarative-shaders:i386 qt4-qmlviewer:i386 libqt4-dev:i386
  libthai0:i386 libicu48:i386 qt4-qtconfig:i386
Recommended packages:
  libqt4-sql-mysql:i386 libqt4-sql-odbc:i386 libqt4-sql-psql:i386 libqt4-sql-sqlite:i386 libcups2:i386
  sni-qt:i386 libasound2-plugins:i386
The following NEW packages will be installed:
  libaudio2:i386 libjbig0:i386 liblcms1:i386 libmng1:i386 libqt4-dbus:i386 libqt4-declarative:i386
  libqt4-network:i386 libqt4-opengl:i386 libqt4-script:i386 libqt4-sql:i386 libqt4-xml:i386
  libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libssl1.0.0:i386 libtiff5:i386
  libxss1:i386 libxv1:i386 skype skype-bin:i386
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 33.9 MB/38.2 MB of archives.
After this operation, 118 MB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously unselected package libssl1.0.0:i386.
(Reading database ... 208485 files and directories currently installed.)
Unpacking libssl1.0.0:i386 (from .../libssl1.0.0_1.0.1c-4ubuntu8.1_i386.deb) ...
Selecting previously unselected package libaudio2:i386.
Unpacking libaudio2:i386 (from .../libaudio2_1.9.3-5ubuntu0.13.04.1_i386.deb) ...
Selecting previously unselected package liblcms1:i386.
Unpacking liblcms1:i386 (from .../liblcms1_1.19.dfsg-1.2ubuntu2_i386.deb) ...
Selecting previously unselected package libmng1:i386.
Unpacking libmng1:i386 (from .../libmng1_1.0.10-3build1_i386.deb) ...
Selecting previously unselected package libqtcore4:i386.
Unpacking libqtcore4:i386 (from .../libqtcore4_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-xml:i386.
Unpacking libqt4-xml:i386 (from .../libqt4-xml_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-dbus:i386.
Unpacking libqt4-dbus:i386 (from .../libqt4-dbus_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-network:i386.
Unpacking libqt4-network:i386 (from .../libqt4-network_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-script:i386.
Unpacking libqt4-script:i386 (from .../libqt4-script_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-sql:i386.
Unpacking libqt4-sql:i386 (from .../libqt4-sql_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-xmlpatterns:i386.
Unpacking libqt4-xmlpatterns:i386 (from .../libqt4-xmlpatterns_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libjbig0:i386.
Unpacking libjbig0:i386 (from .../libjbig0_2.0-2ubuntu1_i386.deb) ...
Selecting previously unselected package libtiff5:i386.
Unpacking libtiff5:i386 (from .../libtiff5_4.0.2-4ubuntu2.1_i386.deb) ...
Selecting previously unselected package libqtgui4:i386.
Unpacking libqtgui4:i386 (from .../libqtgui4_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-declarative:i386.
Unpacking libqt4-declarative:i386 (from .../libqt4-declarative_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqt4-opengl:i386.
Unpacking libqt4-opengl:i386 (from .../libqt4-opengl_4%3a4.8.4+dfsg-0ubuntu9.4_i386.deb) ...
Selecting previously unselected package libqtwebkit4:i386.
Unpacking libqtwebkit4:i386 (from .../libqtwebkit4_2.3.0-0ubuntu2_i386.deb) ...
Selecting previously unselected package libxss1:i386.
Unpacking libxss1:i386 (from .../libxss1_1%3a1.2.2-1_i386.deb) ...
Selecting previously unselected package libxv1:i386.
Unpacking libxv1:i386 (from .../libxv1_2%3a1.0.7-1ubuntu0.13.04.1_i386.deb) ...
Selecting previously unselected package skype-bin.
Unpacking skype-bin (from .../skype-bin_4.2.0.11-0ubuntu0.12.04.2_i386.deb) ...
Selecting previously unselected package skype.
Unpacking skype (from .../skype_4.2.0.11-0ubuntu0.12.04.2_amd64.deb) ...
Processing triggers for desktop-file-utils ...
Processing triggers for gnome-menus ...
Processing triggers for hicolor-icon-theme ...
Setting up libssl1.0.0:i386 (1.0.1c-4ubuntu8.1) ...
Setting up libaudio2:i386 (1.9.3-5ubuntu0.13.04.1) ...
Setting up liblcms1:i386 (1.19.dfsg-1.2ubuntu2) ...
Setting up libmng1:i386 (1.0.10-3build1) ...
Setting up libqtcore4:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-xml:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-dbus:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-network:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-script:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-sql:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-xmlpatterns:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libjbig0:i386 (2.0-2ubuntu1) ...
Setting up libtiff5:i386 (4.0.2-4ubuntu2.1) ...
Setting up libxss1:i386 (1:1.2.2-1) ...
Setting up libxv1:i386 (2:1.0.7-1ubuntu0.13.04.1) ...
Setting up libqtgui4:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-declarative:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqt4-opengl:i386 (4:4.8.4+dfsg-0ubuntu9.4) ...
Setting up libqtwebkit4:i386 (2.3.0-0ubuntu2) ...
Setting up skype-bin (4.2.0.11-0ubuntu0.12.04.2) ...
Setting up skype (4.2.0.11-0ubuntu0.12.04.2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

Lưu ý rằng skype là gói i386. Nếu tôi sử dụng apt-get để cài đặt nó, tôi sẽ tự cứu mình khỏi những cơn đau đầu sau này.

Nhưng một số người thích sử dụng .debcác gói, sau đó tự niềng răng vì nó có thể hơi lộn xộn. Bạn nên cài đặt thủ công tất cả các phụ thuộc trước khi sử dụng để hệ thống của bạn không kết thúc với các phụ thuộc chưa được đáp ứng. Một lệnh sẽ giúp là dpkg-deb -Ivì nó hiển thị thông tin của gói:

dpkg-deb -I zynaddsubfx-dssi_2.4.3-3_amd64.deb 
 new debian package, version 2.0.
 size 266936 bytes: control archive=845 bytes.
     917 bytes,    19 lines      control              
     232 bytes,     3 lines      md5sums              
 Package: zynaddsubfx-dssi
 Source: zynaddsubfx
 Version: 2.4.3-3
 Architecture: amd64
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 Original-Maintainer: Debian Multimedia Maintainers <pkg-multimedia-maintainers@lists.alioth.debian.org>
 Installed-Size: 633
 Depends: libasound2 (>= 1.0.16), libc6 (>= 2.15), libgcc1 (>= 1:4.1.1), libjack-jackd2-0 (>= 1.9.5~dfsg-14) | libjack-0.116, libmxml1, libstdc++6 (>= 4.6), zlib1g (>= 1:1.1.4)
[...]

Như bạn có thể thấy, nó liệt kê các phụ thuộc, vì vậy bạn chỉ phải có sudo apt-get installchúng và sau đó sudo dpkg -i. Một lần nữa, thích cài đặt phần mềm từ kho lưu trữ thay vì tải xuống và cài đặt bằng tay dpkg -i.

Bây giờ, nếu bạn đang phát triển, bạn có thể cài đặt bất kỳ thư viện nào bằng apt-getcú pháp. Chỉ cần thêm :i386vào thư viện bạn muốn tải về, và thực hiện. Không cần phải làm điều này bằng tay nếu bạn cài đặt phần mềm từ kho lưu trữ.

Tóm lại: Không, bạn có thể chạy các gói 32 bit mà không cần cài đặt ia32-libs, nếu bạn cài đặt các gói từ kho, thậm chí tốt hơn. Nếu bạn đang trong giai đoạn phát triển, hãy cố gắng luôn sử dụng hệ thống APT.


Tôi có thể làm gì với trình cài đặt .bin để kiểm tra xem gói ia32-libs đã được cài đặt chưa? Theo như tôi biết, ngay cả khi tôi cài đặt thủ công các phụ thuộc chính xác, .bin vẫn sẽ không cài đặt được vì nó tìm kiếm gói ia32-libs. Có cách nào để "đánh lừa" trình cài đặt để nghĩ rằng ia32-libs đã được cài đặt không?
Galgalesh

1
@Gachealesh yêu cầu người bảo trì sửa chữa đồ đạc của họ, họ đã ở trong quá khứ.
Braiam

Vấn đề duy nhất với việc xóa ia32-libs là khi bạn có các chương trình như PlayOnLinux cố gắng sử dụng các thư viện 32 bit để chạy các chương trình windows 32 bit. Sau đó, đây là một phá vỡ ngược tương thích.
AlexLordThorsen

@Rawrgulmuffin họ phải thay đổi ... OpenSUSE và Red Hat đã tuân thủ các tiêu chuẩn LSB và FHS và gói ia32-libs không cho phép họ dễ dàng quản lý các thay đổi được thực hiện, đó là một thư mục duy nhất cho mỗi ngành kiến ​​trúc. Thay vào đó, các nhà phát triển chỉ nên làm theo phần giới thiệu về multiarch và đóng gói lại các gói của họ cho phù hợp. Nếu họ không ở trong 3 năm qua, họ sẽ lười biếng.
Braiam

@Braiam Vì vậy, lỗi là do các tiêu chuẩn LSB và FHS phá vỡ tính tương thích ngược sau đó. Có vẻ như hoàn toàn tuyên bố rằng điều này chỉ yêu cầu các nhà phát triển đóng gói lại, đặc biệt là vì điều này phá vỡ tất cả các gói dựa trên lib32.
AlexLordThorsen

12

Hãy nhớ thêm kiến ​​trúc i386 hoặc bạn sẽ không thể cài đặt các gói 32 bit:

sudo dpkg --add-architecture i386
sudo apt-get update

Kiểm tra hướng dẫn xử lý sự cố gói: https://help.ubfox.com/community/PackageManagerTroubledh BootProcedure


Hai lệnh trên không cài đặt bất kỳ gói 32 bit nào cho tôi. Tôi đang thiếu gì?
e40

2
OK, đối với tôi, tôi đã phải thực hiện hai lệnh bổ sung: apt-get install libc6:i386apt-get install libgtk2.0-0:i386(lệnh sau vì đây là ứng dụng GTK).
e40
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.