【问题标题】:Java CPLEX Concert UnsatisfiedLinkErrorJava CPLEX Concert UnsatisfiedLinkError
【发布时间】:2020-07-08 13:17:02
【问题描述】:

我正在尝试在 Ubuntu 16.4 上使用 Eclipse IDE 在 java 中使用 cplex

我得到一个异常“UnsatisfiedLinkError”,如下所示 有人知道如何克服这个异常吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: 'void ilog.concert.cppimpl.concert_wrapJNI.swig_module_init()'
at ilog.concert.cppimpl.concert_wrapJNI.swig_module_init(Native Method)
at ilog.concert.cppimpl.concert_wrapJNI.<clinit>(concert_wrapJNI.java:1619)
at ilog.concert.cppimpl.IloEnv.<init>(IloEnv.java:49)
at ilog.opl.IloOplFactory.<init>(IloOplFactory.java:84)
at cplex.Mulprod.main(Mulprod.java:15)

我正在使用ensta-paris Java version of mulprod.cpp of OPL distrib提供的以下示例

import ilog.concert.*; 
import ilog.opl.*;
import ilog.opl.IloCplex;

public class Mulprod {
  static final String DATADIR = ".";

  static public void main(String[] args) throws Exception {
    int status = 127;
    try {
        IloOplFactory.setDebugMode(true);
        IloOplFactory oplF = new IloOplFactory();
        IloOplErrorHandler errHandler = oplF.createOplErrorHandler();
        IloOplModelSource modelSource = oplF.createOplModelSource(DATADIR + "/mulprod.mod");
        IloOplSettings settings = oplF.createOplSettings(errHandler);
        IloOplModelDefinition def = oplF.createOplModelDefinition(modelSource, settings);
        IloCplex cplex = oplF.createCplex();
        cplex.setOut(null);
        IloOplModel opl = oplF.createOplModel(def, cplex);
        IloOplDataSource dataSource = oplF.createOplDataSource(DATADIR + "/mulprod.dat");
        opl.addDataSource(dataSource);
        opl.generate();
        if (cplex.solve()) {
            System.out.println("OBJECTI " + opl.getCplex().getObjValue());
            opl.postProcess();
            opl.printSolution(System.out);
        } else {
            System.out.println("No solution!");
        }
        oplF.end();
        status = 0;
    } catch (IloOplException ex) {
        System.err.println("### OPL excepti " + ex.getMessage());
        ex.printStackTrace();
        status = 2;
    } catch (IloException ex) {
        System.err.println("### CONCERT excepti " + ex.getMessage());
        ex.printStackTrace();
        status = 3;
    } catch (Exception ex) {
        System.err.println("### UNEXPECTED UNKNOWN ERROR ...");
        ex.printStackTrace();
        status = 4;
    }
    System.exit(status);
}
}

我在运行配置中的虚拟机参数是

-Djava.library.path=[cplexStudioPath]/cplex/bin/x86-64_linux:[cplexStudioPath]/opl/bin/x86-64_linux

【问题讨论】:

    标签: java eclipse ubuntu-16.04 cplex


    【解决方案1】:

    您还必须设置 LD_LIBRARY_PATH 环境变量,使其包含 OPL 目录(您也在 java.library.path 中指定)。

    另请注意,不需要在 java.library.path 中指定 CPLEX 目录。我建议删除它,因为您不希望从这个地方加载库。您只需要 OPL 目录中的库(所需的 CPLEX 库也在那里)。

    【讨论】:

    • 谢谢,我不再得到那个异常了,但目前,我得到 java.lang.IncompatibleClassChangeError: class ilog.concert.cppimpl.IloAddNumVar can not implement ilog.concert.IloColumn,因为它不是接口(ilog.concert.IloColumn 位于加载程序“app”的未命名模块中)
    • 这很奇怪。您是否安装了多个 CPLEX?或者也许你的罐子之一损坏了?你用什么罐子?您唯一需要的是oplall.jar
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多