คุณรันโปรแกรม 32- บิตบน Ubuntu เวอร์ชั่น 64 บิตได้อย่างไร


41

ฉันมี Ubuntu 13.10 รุ่น 64 บิต ฉันต้องการเรียกใช้โปรแกรมรุ่น 32 บิต อย่างไรก็ตามฉันเห็นia32-libsไม่รวมอยู่ใน 13.10 มีแพ็คเกจทดแทนสำหรับสิ่งนี้หรืออะไร



@bain นี่ไม่ซ้ำกัน คำถามนี้เกี่ยวกับสถานการณ์ทั่วไปซึ่งเป็นปัญหาเฉพาะไม่พูดถึงคำถามนี้เป็นคำถามที่เก่ากว่าและดีกว่า
เซ ธ

และคำตอบของ Braiam นั้นยอดเยี่ยมมาก ! ดังนั้นถ้ามันถูกดักจับที่ไหนก็ควรจะถูกผสาน
Mateo

คำตอบ:


30

ไม่จำเป็นต้องใช้ia32-libsแพคเกจอีกต่อไป (ตั้งแต่ 12.04 เป็นที่แน่นอน) หากคุณใช้ระบบ APT คุณไม่ต้องกังวลกับการติดตั้งแพ็คเกจ 32 บิตในระบบ 64 บิต สิ่งนี้เกิดขึ้นตั้งแต่มีการเปิดตัวmultiarchซึ่งเป็นหนึ่งในนโยบายที่เปลี่ยนแปลงเกมมากที่สุดของ Debian ในวิธีที่ Debian จัดการมันขึ้นอยู่กับการพึ่งพา วิธีนี้ช่วยให้มีเป้าหมายไบนารีที่แตกต่างกันในระบบเดียวกันโดยไม่สนใจสถาปัตยกรรมเคอร์เนล นี่ไม่ได้หมายความว่าคุณสามารถเรียกใช้แพคเกจแบบ 32 บิตโดยไม่ต้องเตรียม แต่ถ้าคุณติดตั้งไลบรารี / ไบนารีโปรแกรมใด ๆ ในทางทฤษฎีควรจะสามารถเรียกใช้ สิ่งนี้เป็นจริงจาก 64- บิตถึง 32- บิตและในทางกลับกัน

ป้อนคำอธิบายรูปภาพที่นี่

สำหรับการใช้วิธีการดังกล่าวขอแนะนำให้ใช้ผู้จัดการ APT เพื่อป้องกันการพึ่งพาที่ไม่คาดคิด รายการเปลี่ยนแปลงมีประวัติเล็ก ๆ เกี่ยวกับวิธีการเปลี่ยนแปลง:

  1. ในแพคเกจที่ถูกต้องถูกทำให้ว่างเปล่าและทำแพคเกจการนำส่ง มันถูกเพิ่มการอ้างอิงหลายอย่างกับแพคเกจที่ไม่ได้ถูกย้ายไปยังหลายราชา
  2. ช้า แต่แน่นอนแพคเกจทั้งหมดถูกสร้างใหม่ด้วยการสนับสนุน multiarch และการอ้างอิงย้อนกลับถูกลดลงหรือเปลี่ยนเป็น ia32-lib-multiarch เมื่อแพ็กเกจเหล่านี้หยุดต้องการแพ็กเกจ ia34-libs การพึ่งพาถูกทิ้งในเวลาเดียวกัน อ้างอิงมีการเปลี่ยนแปลงจากia32-libsการpackage:archเป็นpackageชื่อของไลบรารีที่จำเป็นและarchสถาปัตยกรรม (ด้านล่างมีเป็นตัวอย่างกับ Skype ก)
  3. ด้วยการเปิดตัวล่าสุดia32-libs-multiarchแพคเกจถูกลบออกจากรุ่นก่อน raring และia32-libsไม่ได้รับการเผยแพร่ไปยังทะลึ่ง แพ็คเกจ Ubuntu ทั้งหมดนั้นมีความสามารถหลากหลายและคุณสามารถติดตั้งแพ็คเกจสถาปัตยกรรมที่แตกต่างกันในระบบของคุณ

ตอนนี้เมื่อติดตั้งแพคเกจที่ต้องการไบนารี 32 บิตถ้าคุณไม่ใส่ใจคุณจะไม่มีทางรู้ว่าคุณกำลังใช้แพคเกจ 32 บิตเนื่องจากตัวจัดการแพ็คเกจจะดึงการพึ่งพาที่จำเป็นโดยอัตโนมัติ:

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

โปรดสังเกตว่า skype เป็นแพ็คเกจ i386 หากฉันใช้ apt-get เพื่อติดตั้งฉันจะบันทึกตัวเองจากอาการปวดหัวในภายหลัง

แต่บางคนชอบที่จะใช้.debแพ็คเกจแล้วรั้งตัวเองเพราะมันอาจยุ่งหน่อย คุณควรติดตั้งการพึ่งพาทั้งหมดด้วยตนเองก่อนถึงมือเพื่อให้ระบบของคุณไม่ได้ขึ้นอยู่กับการพึ่งพาแบบไม่คาดคิด คำสั่งที่จะช่วยได้dpkg-deb -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)
[...]

ในขณะที่คุณสามารถดูจะแสดงรายการอ้างอิงเพื่อให้คุณมีเฉพาะกับพวกเขาแล้วsudo apt-get install อีกครั้งชอบการติดตั้งซอฟต์แวร์จากที่เก็บแทนของการดาวน์โหลดพวกเขาและติดตั้งด้วยตนเองด้วยsudo dpkg -idpkg -i

ตอนนี้ถ้าคุณพัฒนาแล้วคุณสามารถติดตั้งไลบรารีใดก็ได้โดยใช้apt-getไวยากรณ์ เพียงเพิ่ม:i386ไลบรารีที่คุณต้องการดาวน์โหลดและทำ ไม่จำเป็นต้องทำด้วยตนเองหากคุณติดตั้งซอฟต์แวร์จากที่เก็บ

ด้านล่างบรรทัด: ไม่คุณสามารถเรียกใช้แพคเกจแบบ 32 บิตโดยไม่ต้องติดตั้งia32-libsถ้าคุณติดตั้งแพคเกจจากที่เก็บที่ดียิ่งขึ้น หากคุณกำลังพัฒนาให้พยายามใช้ระบบ APT เสมอ


ฉันจะทำอย่างไรกับตัวติดตั้ง. bin ที่ตรวจสอบว่ามีการติดตั้งแพ็คเกจ ia32-libs หรือไม่ เท่าที่ฉันรู้แม้ว่าฉันจะติดตั้งการอ้างอิงที่ถูกต้องด้วยตนเอง. bin จะยังคงล้มเหลวในการติดตั้งเพราะมันค้นหาแพ็คเกจ ia32-libs มีวิธี "หลอก" ผู้ติดตั้งที่คิดว่าติดตั้ง ia32-libs หรือไม่?
Galgalesh

1
@Galesalesh ขอให้ผู้ดูแลแก้ไขสิ่งที่พวกเขาพวกเขาในอดีต
Braiam

ปัญหาเดียวของการลบ ia32-libs คือเมื่อคุณมีโปรแกรมเช่น PlayOnLinux ซึ่งพยายามใช้ไลบรารี 32 บิตเพื่อรันโปรแกรม windows 32 บิต แล้วนี่เป็นการย้อนกลับเข้ากันไม่ได้
AlexLordThorsen

@Rawrgulmuffins พวกเขาต้องเปลี่ยน ... OpenSUSE และ Red Hat ได้ปฏิบัติตามมาตรฐาน LSB และFHSแล้วและแพ็คเกจ ia32-libs ไม่อนุญาตให้จัดการการเปลี่ยนแปลงที่จะทำซึ่งเป็นไดเรกทอรีเดียวสำหรับแต่ละรายการ สถาปัตยกรรม. นักพัฒนาควรทำตามคำแนะนำเบื้องต้นเกี่ยวกับ multiarch และทำแพ็กเกจใหม่ตามความเหมาะสม หากพวกเขาไม่ได้อยู่ในช่วง 3 ปีที่ผ่านมาพวกเขาขี้เกียจ
Braiam

@Braiam ดังนั้นความผิดก็คือตามมาตรฐาน LSB และ FHS สำหรับการทำลายความเข้ากันได้ย้อนหลัง ดูเหมือนว่าโง่เขลาที่จะบอกว่านี่เป็นเพียงแค่การพัฒนาเพื่อ repackage โดยเฉพาะอย่างยิ่งตั้งแต่นี้แบ่งแพคเกจทั้งหมดที่อาศัย lib32
AlexLordThorsen

12

อย่าลืมเพิ่มสถาปัตยกรรม i386 มิฉะนั้นคุณจะไม่สามารถติดตั้งแพ็คเกจ 32 บิตได้:

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

ตรวจสอบคู่มือการแก้ไขปัญหาแพ็คเกจ: https://help.ubuntu.com/community/PackageManagerTroubleshootingProcedure


คำสั่งสองข้อข้างต้นไม่ได้ติดตั้งแพ็คเกจ 32 บิตสำหรับฉัน ฉันพลาดอะไรไป
e40

2
ตกลงสำหรับฉันฉันต้องทำสองคำสั่งเพิ่มเติม: apt-get install libc6:i386และapt-get install libgtk2.0-0:i386(อันหลังเพราะมันเป็นแอพ GTK)
e40
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.