Итак, я использую 64-битное оборудование с Ubuntu и пытаюсь играть в Quake 3, но не могу установить Libgl1 .

 sudo apt-get install --reinstall libgl1-mesa-glx:i386
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Reinstallation of libgl1-mesa-glx:i386 is not possible, it cannot be downloaded.
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

1 ответ1

0

Как вы знаете, i386 означает, что пакет, который вы пытаетесь установить, предназначен для 32-битной системы.

Как объяснено здесь: https://askubuntu.com/questions/522372/install-32-bit-libraries-on-ubuntu-14-04-lts-64-bit вы можете установить 32-битные библиотеки в 64-битной системе.

По этой ссылке мы читаем https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/949606 :

Пакеты 64-битной разработки содержат 64-битную версию библиотечного файла (ов), которую они предоставляют для связывания, но не 32-битную версию библиотечного файла (ов). В предыдущих версиях Ubuntu, однако, было возможно скомпилировать 32-битные приложения, используя 64-битные пакеты dev, установив ia32-libs, который содержал необходимые 32-битные библиотечные файлы.

При переходе на multiarch 32-битные библиотечные файлы удаляются из ia32-libs. Multiarch (я полагаю) стремится разделить архитектуру, поэтому обычно предполагаемое решение заключается в установке версии i386 пакета dev при компиляции 32-битных приложений, то есть параллельно с 64-битным пакетом dev.

Однако некоторые 64-разрядные пакеты разработки конфликтуют с 32-разрядным эквивалентом. Это создает регрессивную ситуацию, когда их невозможно установить рядом - вы вынуждены либо установить 32-битный пакет, который нарушает 64-битные компиляции, либо 64-битный пакет, который нарушает 32-битные компиляции.

Примером является libglu1-mesa-dev, который конфликтует с libglu1-mesa-dev:i386. Файл libglu1-mesa-dev содержит все необходимые файлы разработки для 32-разрядной версии, кроме 32-разрядной библиотеки. Он содержит 64-битный файл библиотеки. Поскольку файл библиотеки является частью файлов разработки, libglu1-mesa-dev не содержит всех необходимых файлов разработки для 32-разрядных, то есть он не содержит все необходимые файлы разработки для мультиархии. Я думаю, что он должен содержать все необходимые файлы для сборки приложений мультиарх.

Два обходных пути:

  1. Перед компиляцией 32-битных приложений вручную переустановите требуемые пакеты i386 dev, а затем вручную переустановите необходимые пакеты amd64 dev перед компиляцией 64-битных приложений. Это настоящая боль.

  2. Установите двоичный пакет i386 (например, libglu1-mesa:i386) и пакет dev amd64 (например, libglu1-mesa-dev) и вручную создайте символические ссылки для пакета lib38YZ.so i386 (например, sudo ln -s /usr /lib /i386). -linux-gnu /libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so). Это более постоянное решение, но его очень сложно настроить, так как вам нужно найти каждую отсутствующую библиотеку вручную, а некоторые библиотечные файлы, такие как mesa /libGL.so.1, находятся в подпапках.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .