Java CPLEX Concert UnsatisfiedLinkError

Java CPLEX Concert UnsatisfiedLinkError

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

上使用 eclipse IDE

我收到如下异常“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);
}
}

我在 运行 配置中的 VM 参数是

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

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

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