Stata 14 не запускается в Ubuntu 16.10/17.04/17.10 с ошибкой "libpng12.so.0". Как мне установить libpng12?

Проприетарное программное обеспечение Stata версии 14 отлично работает на LTS 16.04, но я допустил ошибку при обновлении Ubuntu до 16.10, не думая о том, что проприетарное программное обеспечение (Stata - мое единственное) может сломаться. Я не могу понизить. Стата говорит:

stata-se: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory

Поддержка Stata говорит мне, чтобы установить libpng12.

Поэтому мой вопрос: как я могу безопасно установить и сделать эту библиотеку доступной для Stata? (Очевидно, графический интерфейс Stata не будет работать идеально даже с библиотекой, но функциональность будет доступна.)

Попытка с apt дает:

E: Невозможно найти пакет libpng12

libpng-dev уже установлен, и, кажется, не соответствует потребности.

Я предполагаю, что поддержка Stata сказала бы мне, если бы работало простое исправление, как это, но при попытке подделать его с помощью символических ссылок,

sudo ln -s /usr/lib/i386-linux-gnu/libpng16.so.16.25.0 /usr/lib/i386-linux-gnu/libpng12.so.0

не имеет значения.

sudo ln -s /usr/lib/i386-linux-gnu/libpng16.so.16.25.0 /usr/lib/x86_64-linux-gnu/libpng12.so.0

дал:

stata-se: error while loading shared libraries: libpng12.so.0: wrong ELF class: ELFCLASS32

2 ответа

Решение

Ваши символические ссылки не будут работать, потому что вы создаете ссылку на библиотеку i386 по пути, который обычно ищется для библиотек amd64. Исполняемые файлы, скомпилированные для одной архитектуры (amd64), не могут загружать разделяемые библиотеки, скомпилированные для другой архитектуры (i386).

Возможно, вы сможете обмануть Stata, чтобы использовать libpng16 вместо libpng12, если вы убедитесь, что он для той же архитектуры, что и сам исполняемый файл Stata. Я предполагаю, что последний предназначен для amd64 (учитывая, что сообщение об ошибке жалуется на недопустимый класс ELF ELFCLASS32 который используется только для наборов команд i386).

Похоже, что Stata явно проверяет версию libpng, поэтому описанная выше уловка и, следовательно, два решения, основанные на ней ниже, не будут работать. Обратитесь к лучшему решению вместо этого.

Быстрое и грязное решение

Маскарад libpng16.so.16 как libpng12.so.0 для всех исполняемых файлов amd64:

sudo ln -sfT libpng16.so.16 /usr/lib/x86_64-linux-gnu/libpng12.so.0

Все еще грязный, но с меньшим количеством будущих сюрпризов

Маскарад libpng16.so.16 как libpng12.so.0 только для выбранных исполняемых файлов (таким образом устраняется риск того, что другое приложение подхватит фальшивку) libpng12.so.0 по ошибке):

  1. Создайте каталог для общих библиотек "маскарад", например:

    sudo mkdir -p /usr/local/lib/stata/shared-library-hack
    
  2. Поместите в него символическую ссылку на общую библиотеку с маской:

    sudo ln -s /usr/lib/x86_64-linux-gnu/libpng16.so.16 /usr/local/lib/stata/shared-library-hack/libpng12.so.0
    
  3. Запустите программу с измененным путем поиска в библиотеке:

    LD_LIBRARY_PATH=/usr/local/lib/stata/shared-library-hack [COMMAND] [ARGUMENTS...]
    

    Или, если вы хотите сохранить потенциально существующие изменения в пути поиска библиотеки:

    LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+"${LD_LIBRARY_PATH}:"}/usr/local/lib/stata/shared-library-hack" [COMMAND] [ARGUMENTS...]
    

    Если вы не хотите вводить такую ​​длинную команду каждый раз, когда запускаете такое приложение, вы можете использовать оболочку сценария оболочки или отредактировать описание запуска приложения (т. Е. Exec= строфа в .desktop файл) соответственно.

Лучшее решение

На самом деле установить libpng12.so.0, Самый простой способ - это загрузить и установить пакет Deb из более ранней версии Ubuntu:

  1. Перейдите по https://packages.ubuntu.com/xenial/amd64/libpng12-0/download, выберите зеркало и загрузите архив пакета.

  2. Используйте ваш любимый менеджер пакетов для установки архива пакетов.

    В командной строке вы можете использовать:

    sudo apt install [DOWNLOAD-PATH]/libpng12-0_*_amd64.deb
    

    (Заменить [DOWNLOAD-PATH] с тем путем, который вы использовали в качестве целевого каталога для загрузки ранее.)

Это не правильное решение, потому что обновления libpng12, включая обновления безопасности, не будут устанавливаться автоматически, поэтому это создает угрозу безопасности. - fkraiem 8 декабря 17 в 4:36

Вот простой / компактный ответ:

Это проверено для 64-битных Stata на 64-битных Ubuntu 16.10 и 17.10 (но, похоже, не работает 17.04?). Просто:

посетите http://packages.ubuntu.com/xenial/amd64/libpng12-0/download и нажмите на любую из ссылок на зеркала там. Это будет скачать libpng12-0_1.2.54-1ubuntu1_amd64.deb, Нажмите на этот файл или запустите его с чем-то вроде

gnome-open ~/Downloads/libpng12-0_1.2.54-1ubuntu1_amd64.deb

и нажмите кнопку установки.

Теперь Stata14 и его xstata будут запускаться нормально. Значки будут отсутствовать в меню, но все остальное работает нормально.

Другие вопросы по тегам