歪比巴啵 2022-07-02 20:05 采纳率: 33.3%
浏览 60
已结题

服务器端跑java和matlab混合编程jar包问题

java和matlab混合编程,在本地(windows系统)跑jar包完全没有问题,在到服务器(centos7)上跑就报错!

有两个错误:
1、java.lang.UnsatisfiedLinkError: Failed to find the required library libmwmclmcrrt.so.9.5 on java.library.path.
2、java.lang.NoClassDefFoundError: Could not initialize class com.mathworks.toolbox.javabuilder.internal.MWMCR

远程服务器 centos7系统

  • 写回答

1条回答 默认 最新

  • ubwub 2022-07-02 21:34
    关注

    在ubuntu下添加LD_LIBRARY_PATH。添加方法:sudo gedit /etc/environment . 打开的文件里输入:LD_LIBRARY_PATH=“你的路径”,然后保存关闭,使用source /etc/environemnt 立即生效。注意:这里虽然是立即生效,但是只是一个终端下生效,一旦新打开一个终端,输入echo $LD_LIBRARY_PATH,又会看到不存在那个路径。有效的生效方式是重新启动ubuntu。
    NoClassDefFoundError产生的原因有好几种,这里记录静态变量或静态块引起的。具体抛出的异常类似:
    java.lang.NoClassDefFoundError: Could not initialize class xxx

    JVM在加载类的时候,会初始化类里的静态变量,或执行静态块,如果这个时候抛出了异常,该类就会加载失败,那么以后任何使用到这个类的地方,都会抛出NoClassDefFoundError异常,如下面的例子:

    public class TestNoClassDefFoundError {
    public static void main(String[] args) throws InterruptedException {
    TestNoClassDefFoundError sample = new TestNoClassDefFoundError();
    sample.getClassWithInitErrors();
    }

    private void getClassWithInitErrors() throws InterruptedException {
        System.out.println("第一次new");
        Thread.sleep(500);
        try {
            //第一次new ClassWithInitErrors类,JVM会加载该类,初始化该类的静态变量或执行静态块
            new ClassWithInitErrors();
        } catch (Throwable t) {
            //因为初始化静态变量失败,所以加载类失败。
            t.printStackTrace();
        }
    
        Thread.sleep(500);
        System.out.println("-----------------------------------------------------");
        System.out.println("第二次new");
        Thread.sleep(500);
        try {
            //第二次new ClassWithInitErrors类,JVM不会再加载该类,而是抛出NoClassDefFoundError异常
            new ClassWithInitErrors();
        } catch (Throwable t) {
            t.printStackTrace();
        }
        Thread.sleep(500);
        System.out.println("-----------------------------------------------------");
        System.out.println("第三次new");
        Thread.sleep(500);
        try {
            //第三次new ClassWithInitErrors类,JVM不会再加载该类,而是抛出NoClassDefFoundError异常
            new ClassWithInitErrors();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
    

    }

    class ClassWithInitErrors {
    static int data = 1 / 0;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    执行结果如下:

    第一次new
    java.lang.ExceptionInInitializerError
    at TestNoClassDefFoundError.getClassWithInitErrors(TestNoClassDefFoundError.java:12)
    at TestNoClassDefFoundError.main(TestNoClassDefFoundError.java:4)
    Caused by: java.lang.ArithmeticException: / by zero
    at ClassWithInitErrors.(TestNoClassDefFoundError.java:42)
    ... 2 more


    第二次new
    java.lang.NoClassDefFoundError: Could not initialize class ClassWithInitErrors
    at TestNoClassDefFoundError.getClassWithInitErrors(TestNoClassDefFoundError.java:24)
    at TestNoClassDefFoundError.main(TestNoClassDefFoundError.java:4)


    第三次new
    java.lang.NoClassDefFoundError: Could not initialize class ClassWithInitErrors
    at TestNoClassDefFoundError.getClassWithInitErrors(TestNoClassDefFoundError.java:34)
    at TestNoClassDefFoundError.main(TestNoClassDefFoundError.java:4)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    上述代码,第二次及以后使用到ClassWithInitErrors类的地方,都只会抛出NoClassDefFoundError错误,而且通常我们查看日志的时候,都会先看最新的日志,所以就不容易找到加载类失败的真正原因,对于这种情况,我们应该搜索java.lang.ExceptionInInitializerError错误,找到第一次加载类的时候的日志,才能看到失败的原因。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月9日
  • 创建了问题 7月2日

悬赏问题

  • ¥30 电脑误删了手机的照片怎么恢复?
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了