我不能确定这是否是根的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
。
uname -sr
返回:Linux的4.9.125-linuxkit该libedit共享对象没有被JConsole的可执行文件发现 - 有可以解决这个问题的一些方法。
首先,共享对象文件不搜索使用$PATH
据我所知:您需要更改/创建$LD_LIBRARY_PATH
。
例如,多克尔图像里面,运行:
$ export LD_LIBRARY_PATH="/opt/conda/lib:$LD_LIBRARY_PATH"
(你也可以在运行时,容器注入这个环境变量;使用-e
的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)
...
在JConsole中挑选他们,而不需要修改环境变量来这会将libedit共享对象/usr/lib/x86_64-linux-gnu
。
如果你有在图像内的root访问权限,还可以运行sudo apt-get install libedit-dev
有替代,或使用/usr/lib/x86_64-linux-gnu
(虽然你已经有了这个,你跑的图像都必须这样做)的共享对象只是链接到ln -s
。