java - Matlab安装(LD_LIBRARY_PATH)把其他库文件弄乱了

标签 java python linux matlab amazon-ec2

我正在尝试在 Linux 机器上安装 Matlab,但设置 LD_LIBRARY_PATH(根据安装要求)会破坏其他库文件。我不是 Linux 专家,但我尝试了几种方法,但无法使其正常工作。我什至联系了 Matlab 支持,将问题提升到开发团队,并且基本上被告知“哈哈糟透了”。我在网上看到其他几个人也遇到了同样的问题,但要么他们的问题从未得到解答,要么他们的问题略有不同,他们的解决方案不适用于我。

在运行 Ubuntu 的虚拟机上安装:

我按照说明设置了 LD_LIBRARY_PATH,然后它破坏了网络文件。我可以 ping google.com,但我不能 nslookup google.com 或在浏览器中访问它。 Nslookup 提供了这个错误:

nslookup: /usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64/libcrypto.so.1.0.0: no version information available (required by /usr/lib/libdns.so.100)
03-Feb-2016 11:32:22.361 ENGINE_by_id failed (crypto failure)
03-Feb-2016 11:32:22.362 error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
03-Feb-2016 11:32:22.363 error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:447:
03-Feb-2016 11:32:22.363 error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:418:id=gost
(null): dst_lib_init: crypto failure

虽然安装有效(我可以运行我的 Java 程序,该程序引用已编译的 Matlab 函数)。取消设置 LD_LIBRARY_PATH 可修复网络文件,但我无法再运行程序。

在 EC2 实例上安装:

在 EC2 实例上,它不会破坏网络文件(nslookup 没问题)。相反,它会弄乱 Python 库文件。尝试使用任何 aws cli 命令时,出现错误:

File "/usr/bin/aws", line 19, in <module>
  import awscli.clidriver
File "/usr/lib/python2.7/dist-packages/awscli/clidriver.py", line 16, in <module>
  import botocore.session
File "/usr/lib/python2.7/dist-packages/botocore/session.py", line 25, in <module>
  import botocore.config
File "/usr/lib/python2.7/dist-packages/botocore/config.py", line 18, in <module>
  from botocore.compat import six
File "/usr/lib/python2.7/dist-packages/botocore/compat.py", line 139, in <module>
  import xml.etree.cElementTree
File "/usr/lib64/python2.7/xml/etree/cElementTree.py", line 3, in <module>
  from _elementtree import *
ImportError: PyCapsule_Import could not import module "pyexpat"

在 Python 中打印 sys.path 显示 lib-dynload 已经存在,所以它似乎不是问题。

当尝试运行该程序时,我得到:

Exception in thread "main" java.lang.LinkageError: libXt.so.6: cannot open shared object file: No such file or directory
at com.mathworks.toolbox.javabuilder.internal.DynamicLibraryUtils.dlopen(Native Method)
at com.mathworks.toolbox.javabuilder.internal.DynamicLibraryUtils.loadLibraryAndBindNativeMethods(DynamicLibraryUtils.java:134)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1529)
at VectorAddExample.VectorAddExampleMCRFactory.newInstance(VectorAddExampleMCRFactory.java:48)
at VectorAddExample.VectorAddExampleMCRFactory.newInstance(VectorAddExampleMCRFactory.java:59)
at VectorAddExample.VectorAddClass.<init>(VectorAddClass.java:62)
at com.mypackage.Example.main(Example.java:13)

我在一堵砖墙前,真的不知道如何继续。

最佳答案

也许其他东西已经需要 LD_LIBRARY_PATH 设置才能工作。确保你在前面加上不覆盖:

export LD_LIBRARY_PATH=new/path:$LD_LIBRARY_PATH

编辑:

好的,如果 LD_LIBRARY_PATH 最初是空的,这表明 Matlab 带有与您的系统不兼容的共享库:

nslookup: /usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64/libcrypto.so.1.0.0: no version information available (required by /usr/lib/libdns.so.100)

建议/usr/lib/libdns.so.100需要libcrypto.so.1.0.0,现在正在解析为MATLAB自带的, 这是不兼容的。

您可以通过以下方式检查dll的依赖关系

ldd /usr/lib/libcrypto.so.1.0.0

希望您能找到一个让 MATLAB 和您的系统都满意的配置。不幸的是,这可能涉及大量的试验和错误。

如果没有这样的配置,你可以尝试只在运行MATLAB时设置LD_LIBRARY_PATH:

LD_LIBRARY_PATH=$MATLAB_LD_LIBRARY_PATH matlab

编辑 2:

嗯,对于 Python 问题,它似乎可以归结为 pyexpat,它是标准 expat XML 解析器的包装器。尝试做(名字猜了,因为我现在没有 Linux):

ldd/usr/local/lib/python2.7/site-packages/libpyexpat.so

看看它依赖于什么。可能是 libexpat.so,现在正在解析为 MATLAB 的版本。

关于java - Matlab安装(LD_LIBRARY_PATH)把其他库文件弄乱了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183190/

相关文章:

java - 如何让 Tomcat 管理器/状态与我的本地主机名一起使用?

python - 您如何从 ~/.aws/.credentials 和 ~/.aws/.config 文件中使用 boto3 列出本地配置文件?

linux - 尝试运行 Qt 应用程序时 LD_LIBRARY_PATH 失败

c - 一个共享内存段是否有可能多次附加到同一个父 pid?

linux - 使用 shell 脚本从字符串中提取版本号

java - Sonar Java Web客户端: Authors by line null

java - Wildfly 8.2.1最终无法解析配置

java - 在 Java 中读写同一个文件

python - 是否可以使用 SqlAlchemy 自动解码字符串?

python - asyncio的事件循环使用什么调度算法?