Як запускати 32-бітну програму на 64-бітній версії Ubuntu?


41

У мене 64-бітна версія Ubuntu 13.10. Я хочу запустити 32-бітну версію програми. Однак я бачу ia32-libs, що не включається в 13.10. Чи є для цього пакет замінника чи що?



@bain Це не дублікат. Це питання стосується загальних ситуацій, тобто конкретного питання, не кажучи вже про це старіше, краще питання.
Сет

І відповідь Браяма приголомшлива ! тож якби його десь обдурили, його слід об'єднати.
Матео

Відповіді:


30

ia32-libsПакет більше не потрібен (починаючи з 12.04, якщо точніше), якщо ви використовуєте систему APT, вам не доведеться турбуватися про встановлення 32-бітних пакетів у 64-бітній системі. Це сталося з моменту введення мультиарха , однієї з найпоширеніших політик Debian, що змінює ігри, у тому, як Debian управляє залежностями. Цей метод дозволяє мати різні бінарні цілі в одній системі без піклування про архітектуру ядра. Це не означає, що ви можете запускати будь-який 32-бітний пакет без підготовки, але якщо ви встановите бібліотеки / бінарні файли, будь-які програми теоретично повинні мати змогу запускатися. Це вірно від 64-бітного до 32-бітного і навпаки.

введіть тут опис зображення

Для використання такого методу рекомендується використовувати менеджери APT, щоб запобігти незадоволеним залежностям. Журнал змін включає невелику історію про те, як внесені зміни:

  1. Точно упаковку випорожнили і зробили перехідний пакет . Було додано кілька залежностей від пакетів, які не переміщені до мультиарха.
  2. Повільно, але напевно, всі пакунки були відновлені з підтримкою мультиарха, а зворотні залежності відмінялися або змінювалися на ia32-lib-multiarch. Коли пакети тез перестають потребувати пакетах ia34-libs, залежність одночасно знижувалася. Залежно були змінені з , ia32-libsщоб package:archбути packageім'ям бібліотеки , необхідної і archархітектура (нижче є приклад з скайпом).
  3. З останнім випускомia32-libs-multiarch пакунок з попередньо завзяття релізів і 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

Зауважте, що скайп - це пакет 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 -i. Знову ж таки, волійте встановлювати програмне забезпечення із сховищ, а не завантажувати їх та встановлювати їх вручну dpkg -i.

Тепер, якщо ваша розробка, ви можете встановити будь-яку бібліотеку за допомогою apt-getсинтаксису. Просто додайте :i386до бібліотеки, яку ви хочете завантажити, і готово. Не потрібно робити це вручну, якщо ви встановлюєте програмне забезпечення із сховищ.

Підсумок: Ні, ви можете запускати 32-бітні пакети без встановлення ia32-libs, якщо встановити пакунки із сховищ, ще краще. Якщо ви перебуваєте в розробці, намагайтеся завжди використовувати систему APT.


Що я можу зробити з інсталятором .bin, який перевіряє, чи встановлений пакет ia32-libs? Наскільки я знаю, навіть якщо я вручну встановіть правильні залежності, .bin все одно не вдасться встановити, оскільки він шукає пакет ia32-libs. Чи є спосіб "обдурити" інсталятора, щоб подумати, що ia32-libs встановлений?
Галгалеш

1
@Galgalesh попросіть технічного обслуговування виправити свої речі, вони вже в минулому.
Брайам

Єдина проблема з видаленням ia32-libs полягає в тому, що у вас є такі програми, як PlayOnLinux, які намагаються використовувати 32-бітні бібліотеки для запуску 32-бітних програм Windows. Тоді це невід'ємна сумісність.
AlexLordThorsen

@Rawrgulmuffins їм довелося змінити ... OpenSUSE і Red Hat вже відповідали стандартам LSB і FHS , а пакет ia32-libs не дозволяв їм легко керувати змінами, які потрібно зробити, що було єдиним каталогом для кожного архітектури. Замість цього розробники повинні просто слідувати вступу для багатоцільового перепакування і відповідно перепакування своїх пакетів. Якщо вони не були останні 3 роки, вони лінуються.
Браям

@Braiam Таким чином, вина в стандартах LSB і FHS для порушення зворотної сумісності тоді. Здається, нерозумно стверджувати, що це просто вимагає від розробників повторної упаковки, тим більше, що це порушує всі пакети, на які покладається 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.