J Ошибка установки: не удается найти "libedit.so" - PullRequest
0 голосов
/ 03 февраля 2019

Я не уверен, в корне ли это проблема Linux или специфическая проблема J.

Справочная информация

Я пытаюсь заставить j804 работать в док-контейнере Linux.Я следую инструкциям здесь:

https://code.jsoftware.com/wiki/System/Installation/J804/Linux.

j64-804 находится в домашнем каталоге контейнера, и я вошел в систему как пользователь root.Вот ошибка, которую я получаю:

$ ./j64-804/jconsole.sh
bin/jconsole: error while loading shared libraries: 
libedit.so: cannot open shared object file: No such file or directory

Я не уверен, как отлаживать отсюда.Что не так и как я могу это исправить?

Другие возможные важные детали

root@b0ed60c2a313:~# find / -name libedit.so*
/opt/conda/pkgs/libedit-3.1.20170329-haf1bffa_1/lib/libedit.so.0
/opt/conda/pkgs/libedit-3.1.20170329-haf1bffa_1/lib/libedit.so.0.0.56
/opt/conda/pkgs/libedit-3.1.20170329-haf1bffa_1/lib/libedit.so
/opt/conda/lib/libedit.so.0
/opt/conda/lib/libedit.so.0.0.56
/opt/conda/lib/libedit.so

И эти каталоги на моем PATH.

1 Ответ

0 голосов
/ 03 февраля 2019

Общий объект libedit не найден исполняемым файлом jconsole - есть несколько способов исправить это.

Во-первых, общие объектные файлы не ищутся с использованием $PATH, насколько мне известно: вынеобходимо изменить / создать $LD_LIBRARY_PATH.

Например, внутри этого образа Docker запустите:

$ export LD_LIBRARY_PATH="/opt/conda/lib:$LD_LIBRARY_PATH"

(Вы также можете добавить эту переменную среды при запуске контейнера; используйте *Опция 1010 * для docker run.)

Тогда у вас есть:

$ wget http://www.jsoftware.com/download/j804/install/j804_linux64.tar.gz
$ tar -xzf j804_linux64.tar.gz
$ ./j64-804/jconsole.sh
    3 + 1 4 1 5
4 7 4 8

Кроме того, вы можете изменить Dockerfile для установки libedit-dev во время сборки:

# Install all OS dependencies for fully functional notebook server
RUN apt-get update && apt-get install -yq --no-install-recommends \
    build-essential \
    emacs \
    git \
    inkscape \
    jed \
    libsm6 \
    libxext-dev \
    libxrender1 \
    libedit-dev \ # <----- here (or wherever you fancy)
    ...

Это помещает общие объекты libedit в /usr/lib/x86_64-linux-gnu, где jconsole забирает их без необходимости изменения переменных среды.

Если у вас есть root-доступ внутри изображения, вы можетевместо этого также запустите sudo apt-get install libedit-dev или просто свяжите общие объекты в /usr/lib/x86_64-linux-gnu, используя ln -s (хотя вам придется делать это каждый раз, когда вы запускаете изображение).

...