Mac 上 java 使用 mathworks 引擎 API 的问题
Issue using mathworks engine API for java on Mac
我正在尝试在我的 Macbook Pro 上为 Java 使用 Mathworks MATLAB 引擎 API。
按照本指南 on the mathworks website 我已将 /extern/engines/java/jar/engine.jar 添加到类路径中,并且我还使用 tcsh shell 将 /bin/maci64 添加到DYLD_LIBRARY_PATH 变量。
然而,当我尝试 运行 下面的简单代码时,我收到了错误消息;
Exception in thread "main" java.lang.UnsatisfiedLinkError: no nativemvm in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.mathworks.mvm.MvmImpl.loadLibrary(MvmImpl.java:107)
at com.mathworks.mvm.MvmImpl.setJavaEngineMode(MvmImpl.java:202)
at com.mathworks.engine.MatlabEngine.<clinit>(MatlabEngine.java:69)
at MatlabTest.main(MatlabTest.java:7)
我在 Netbeans 和 Eclipse 中都试过了,但我得到了同样的错误。这是我正在尝试的代码 运行:
import com.mathworks.engine.*;
public class MatlabTest {
public static void main(String[] args) throws Exception {
MatlabEngine mtlb = MatlabEngine.startMatlab();
double[] vals = {2.0, 3.0, 5.0};
double[] ans = mtlb.feval("javaTest", vals);
for (double n: ans){
System.out.println(n);
}
mtlb.close();
}
}
有没有人经历过同样的事情或者知道我可能做错了什么?
有几种"solutions",取决于你想要达到什么。
您遵循的指南允许您更改终端执行的 shell 的环境变量。因此,这些更改只会影响从您的终端启动的进程(和应用程序)。
方案一:只在运行应用时才需要这个环境变量。因此,您可以在 Eclipse 或 Netbeans 中的程序 启动配置 中设置环境,而不是在终端中设置环境(在 Eclipse 中,[=25] 中有一个环境选项卡=]启动配置设置)。
解决方案 2(假设您的终端在您的更改后确实具有 DYLD_LIBRARY_PATH
的正确环境):从终端启动您的 IDE:关闭 Eclipse,然后从 打开它您的终端 使用命令open -a Eclipse
(或open -a "Eclipse blah blah"
,您需要应用程序的确切名称,如果包含空格则用引号引起来)
以这种方式打开时,Eclipse 应该 "see" 您的变量。
要获得更持久的解决方案,您需要搜索如何在会话级别(或所有用户)设置环境变量,解决方案取决于您使用的 OS 版本 运行(请具体说明,也许我们可以帮助您找到相关链接)。
我正在尝试在我的 Macbook Pro 上为 Java 使用 Mathworks MATLAB 引擎 API。
按照本指南 on the mathworks website 我已将 /extern/engines/java/jar/engine.jar 添加到类路径中,并且我还使用 tcsh shell 将 /bin/maci64 添加到DYLD_LIBRARY_PATH 变量。
然而,当我尝试 运行 下面的简单代码时,我收到了错误消息;
Exception in thread "main" java.lang.UnsatisfiedLinkError: no nativemvm in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at com.mathworks.mvm.MvmImpl.loadLibrary(MvmImpl.java:107)
at com.mathworks.mvm.MvmImpl.setJavaEngineMode(MvmImpl.java:202)
at com.mathworks.engine.MatlabEngine.<clinit>(MatlabEngine.java:69)
at MatlabTest.main(MatlabTest.java:7)
我在 Netbeans 和 Eclipse 中都试过了,但我得到了同样的错误。这是我正在尝试的代码 运行:
import com.mathworks.engine.*;
public class MatlabTest {
public static void main(String[] args) throws Exception {
MatlabEngine mtlb = MatlabEngine.startMatlab();
double[] vals = {2.0, 3.0, 5.0};
double[] ans = mtlb.feval("javaTest", vals);
for (double n: ans){
System.out.println(n);
}
mtlb.close();
}
}
有没有人经历过同样的事情或者知道我可能做错了什么?
有几种"solutions",取决于你想要达到什么。
您遵循的指南允许您更改终端执行的 shell 的环境变量。因此,这些更改只会影响从您的终端启动的进程(和应用程序)。
方案一:只在运行应用时才需要这个环境变量。因此,您可以在 Eclipse 或 Netbeans 中的程序 启动配置 中设置环境,而不是在终端中设置环境(在 Eclipse 中,[=25] 中有一个环境选项卡=]启动配置设置)。
解决方案 2(假设您的终端在您的更改后确实具有 DYLD_LIBRARY_PATH
的正确环境):从终端启动您的 IDE:关闭 Eclipse,然后从 打开它您的终端 使用命令open -a Eclipse
(或open -a "Eclipse blah blah"
,您需要应用程序的确切名称,如果包含空格则用引号引起来)
以这种方式打开时,Eclipse 应该 "see" 您的变量。
要获得更持久的解决方案,您需要搜索如何在会话级别(或所有用户)设置环境变量,解决方案取决于您使用的 OS 版本 运行(请具体说明,也许我们可以帮助您找到相关链接)。