J Install Error: Cannot Find "libedit.so"

J Install Error: Cannot Find "libedit.so"

我不确定这是根本问题 Linux 还是 J 特定问题。

背景

我正在尝试让 j804 在 linux docker 容器中工作。我正在按照此处的说明进行操作:

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 上。

jconsole 可执行文件未找到 libedit 共享对象 - 有几种方法可以解决此问题。

首先,据我所知,不使用 $PATH 搜索共享对象文件:您需要 change/create $LD_LIBRARY_PATH.

例如,在 Docker 图像中,运行:

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

(您也可以在 运行 连接容器时注入此环境变量;对 docker run 使用 -e 选项。)

那么你有:

$ 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,或者只是 link 使用 [=20] 将共享对象 /usr/lib/x86_64-linux-gnu =](尽管每次 运行 图片时都必须这样做)。