从Matlab调用使用Cplex的Java函数时java.library.path中的错误

时间:2015-10-20 16:42:45

标签: java matlab jar cplex

我想从Matlab调用一个使用Cplex的Java函数。 此刻,我被困住了。下面列出了我尝试过的一些事情,但我没有想法。在我到达那里之前,让我列出一下版本:

  1. Matlab版本8.3.0.532(R2014a)
  2. Java 1.7.0_11-b21与Oracle Corporation Java HotSpot(TM)64位服务器VM混合模式
  3. Eclipse with jre7 and jdk1.7.0_79
  4. 我创建了一个包“milp.jar”并尝试从Matlab调用以下函数:

    milp.MTsolver.Plan() 
    

    在我的milp.jar的基本版本中,没有任何Cplex功能,这没有问题。只要我在Java类中使用Cplex函数,就会遇到麻烦。我尝试了以下方法:

    为了能够使用Cplex,我在Matlab文件夹中添加了javaclasspath.txt文件的路径

    prefdir 
    

    命令

    javaclasspath 
    
    Matlab控制台中的

    确实显示此路径已添加到静态Java路径中。 但是,当调用我的cplex依赖函数milp.MTsolver.Plan()时,我收到以下错误:

    Java exception occurred:
    java.lang.UnsatisfiedLinkError: no cplex1262 in java.library.path
    java.library.path must point to the directory containing the CPLEX shared library
    try invoking java with java -Djava.library.path=...
    

    post之后,我应该首先加载库:

    java.lang.System.load('C:\Program Files\IBM\ILOG\CPLEX_Studio1262\cplex\lib\cplex.jar');
    

    但这会产生以下错误:

    Java exception occurred:
    java.lang.UnsatisfiedLinkError: C:\Program Files\IBM\ILOG\CPLEX_Studio1262\cplex\lib\cplex.jar: %1 is not a valid Win32 application
    

    在他看来,我尝试了另一种方法。我刚刚将cplex.jar复制到Matlab根文件夹中。没有成功。在Matlab中复制项目文件夹中的cplex.jar时也没有任何成功。

    然后,我试图找到一个cplex1262.jar,但我只找到了一个cplex1262.dll。所以我将此路径添加到Static Java Path。这会出现以下错误:

    Java exception occurred:
    java.lang.UnsatisfiedLinkError: ilog.cplex.Cplex.CPXopenCPLEX([I)J
    

    当我在Matlab控制台中运行以下内容时,会发生同样的错误:

    java.lang.System.load('C:\Program Files\IBM\ILOG\CPLEX_Studio1262\opl\oplide\plugins\ilog.odms.ide.opllang.win32.win32.x86_64_12.6.2.0\cplex1262.dll');
    

    我可以尝试的最后一件事来自post中的答案。 在这里,他设置

    -Djava.library.path=... 
    
    在VM选项字段中,但在Netbeans中。我可以尝试在Matlab中做类似的事情,但我还没弄明白怎么做。 最后,我刚刚将包含cplex.jar和cplex1262.dll的目录添加到PATH环境变量中。那里也没有运气。

    另一个重要的注意事项可能是我在Eclipse中运行代码没有问题,包括Cplex功能!值得一提的是,在更改之间,我重新启动了Matlab,以确保路径设置中的所有更改都生效。

    我希望能够清楚地说出我的问题。我们非常欢迎任何有关如何进行的建议!

1 个答案:

答案 0 :(得分:0)

我能找到一个快速而肮脏的解决方案,现在还可以。 首先,我尝试将包含cplex1262.dll的目录添加到 'java.library.path'如下:

java.lang.System.setProperty('java.library.path', [path to dir])

但这对我不起作用。以快速而肮脏的方式,我使用以下命令查找已包含在此属性中的路径。

>> java.lang.System.getProperty('java.library.path')

ans =

C:\Program Files\MATLAB\R2014a\bin\win64;C:\Program Files\MATLAB\R2014a\sys\jxbrowser\win64\lib

只需将cplex1262.dll复制/粘贴到\ lib目录中。

那很有效。