我不确定这是Linux问题还是J特定问题。
我正在尝试让j804在Linux docker容器中工作。我正在按照这里的说明进行操作:
https://code.jsoftware.com/wiki/System/Installation/J804/Linux。
self.m_grid1.CreateGrid( 6, 3 )
在容器的主目录中,我以root用户身份登录。这是我得到的错误:
j64-804
我不确定如何从这里调试。怎么了,我该如何解决?
$ ./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
返回的Linux系统信息:Linux 4.9.125-linuxkit 答案 0 :(得分:3)
jconsole可执行文件找不到libedit共享对象-有几种方法可以解决此问题。
首先,据我所知,不使用$PATH
搜索共享对象文件:您需要更改/创建$LD_LIBRARY_PATH
。
例如,在该Docker映像内,运行:
$ 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)
...
这会将libedit共享对象放置在/usr/lib/x86_64-linux-gnu
中,jconsole可以在其中收集它们,而无需修改环境变量。
如果您在映像中具有root用户访问权限,则也可以在其中运行sudo apt-get install libedit-dev
,或者仅使用/usr/lib/x86_64-linux-gnu
将共享库链接到ln -s
中(尽管您必须这样做每次您运行图片时都使用此选项。)