无法在Unix环境中的MATLAB运行时上运行Java代码
将matlab函数导出到java包后。我尝试在unix环境下运行以下代码,其中包含MATLAB运行时无法在Unix环境中的MATLAB运行时上运行Java代码,java,matlab,matlab-deployment,matlab-compiler,Java,Matlab,Matlab Deployment,Matlab Compiler,将matlab函数导出到java包后。我尝试在unix环境下运行以下代码,其中包含MATLAB运行时 import com.mathworks.toolbox.javabuilder.MWArray; import com.mathworks.toolbox.javabuilder.MWCharArray; import calibrationAPINew.Calibration; public class CHIndexCalculation { public static
import com.mathworks.toolbox.javabuilder.MWArray;
import com.mathworks.toolbox.javabuilder.MWCharArray;
import calibrationAPINew.Calibration;
public class CHIndexCalculation {
public static void main(String[] args) {
MWCharArray number1 = null;
Object[] result = null;
Calibration calibration = null;
String data = "{\r\n" +
"\"tsId\" : \"121213\",\r\n" +
"\"datapoints\" : [0.1,0.2,0.3,0.4]\r\n" +
"}";
try
{
System.out.println("Input data: " + data);
number1 = new MWCharArray(data); // Array of Input to be sent to MATLAB Runtime
System.out.println("MWCharArray: " + number1);
calibration = new Calibration();
result = calibration.calibrationAPI(1,number1);
System.out.println("Output : " + result[0]);
}
catch (Exception e)
{
System.out.println("Exception Occurred : " + e);
e.printStackTrace();
}
finally
{
//MWArray.disposeArray(number1);
//MWArray.disposeArray(result);
//calibration.dispose();
}
}
}
我已经在unix上安装了matlabruntime box,并使用export语句设置了环境变量
export LD_LIBRARY_PATH=matlabrt/v92/runtime/glnxa64:matlabrt/v92/bin/glnxa64:matlabrt/v92/sys/os/glnxa64:matlabrt/v92/sys/opengl/lib/glnxa64
现在,当我尝试运行命令时(calibrationAPINew.jar
是从MATLAB导出的jar文件)
我得到以下例外
com.mathworks.toolbox.javabuilder.MWException: Undefined function 'pdist2mex' for input arguments of type 'double'.
at com.mathworks.toolbox.javabuilder.internal.MWMCR.mclFeval(Native Method)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$600(MWMCR.java:31)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mclFeval(MWMCR.java:882)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$5.invoke(MWMCR.java:769)
at com.sun.proxy.$Proxy0.mclFeval(Unknown Source)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:443)
at calibrationAPINew.Calibration.calibrationAPI(Calibration.java:223)
at CHIndexCalculation.main(CHIndexCalculation.java:24)
我知道这与MATLAB运行时有关,但我不知道是什么?同样的设置在windows环境下运行良好。我认为matlab程序使用了一些已经为windows编译的mexfile,因此它在windows上运行得非常完美。由于MEX文件已经可用,它将在windows上完美工作。但是,当您的脚本无法找到linux对应的mexfile时,它会失败或尝试使用jar包中未包含的函数“pdist2mex”编译linux源文件。在windows中,不需要此函数,因此它可以正常工作。如果是这种情况,那么您可以从matlab将函数“pdist2mex”添加到jar中,或者您应该使用matlab手动将源代码编译为linux兼容的mex文件,然后尝试重新打包,然后matlab会自动将相应的mex文件包装到jar中我将尝试一下
com.mathworks.toolbox.javabuilder.MWException: Undefined function 'pdist2mex' for input arguments of type 'double'.
at com.mathworks.toolbox.javabuilder.internal.MWMCR.mclFeval(Native Method)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$600(MWMCR.java:31)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mclFeval(MWMCR.java:882)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$5.invoke(MWMCR.java:769)
at com.sun.proxy.$Proxy0.mclFeval(Unknown Source)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:443)
at calibrationAPINew.Calibration.calibrationAPI(Calibration.java:223)
at CHIndexCalculation.main(CHIndexCalculation.java:24)