【问题标题】:Correctly install Java for Matlab正确安装 Java for Matlab
【发布时间】:2015-03-06 15:21:02
【问题描述】:

我正在尝试使用 Library Compiler(java 包)中的 javac 从 Matlab 代码中提取 jar 文件。

我已将JAVA_HOME 设置为:

C:\Program Files\Java\jdk1.7.0_71

并添加到PATH

C:\Program Files\Java\jdk1.7.0_71\bin

当我在控制台中输入java -version 时,我得到java version jdk1.7.0_71 并运行javac -version 显示jdk1.7.0_71

但是,matlab 似乎找不到 javac,因此,我无法将我的 .m 代码编译成 .jar 文件。当我尝试编译 .m 代码时,我得到以下信息:

Error: An error occurred while shelling out to javac (error code = -1).
Unable to build executable.
Executing command: ""C:\Program Files\Java\Java\jdk1.7.0_11\bin\javac" -verbose - classpath "...\MATLAB\R2014a\toolbox\javabuilder\jar\javabuilder.jar" -d   "...\features_extraction\for_testing\classes"  "...\features_extraction\for_testing\features_extraction\Class1.java" "...\features_extraction\for_testing\features_extraction\Features_extractionMCRFactory.java" "...\for_testing\features_extraction\Class1Remote.java" "...\for_testing\features_extraction\package-info.java""

这是我的 java bin 文件夹的目录,javac.exe 存在:...\Java\jdk1.7.0_71\bin\bin\javac?我找到了这个链接,用于 Java 和 Matlab2014a(这是我的版本)here 之间的兼容性。为了将 Matlab 正确链接到 Java,我应该检查什么?几天前,Matlab 可以在 Java 中正常工作。

在我的PATH 中,我注意到存在以下路径:C:\ProgramData\Oracle\Java\javapath,其中存在三个错误的 java.exe、javac.exe 和 javax.exe 快捷方式。当我输入 matlab 控制台 getenv JAVA_HOME 时,我得到 C:\Program Files\Java\jdk1.7.0_11,而当我写 version -java 时,我得到:Java 1.7.0_11-b21 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode。当我在 matlab 控制台中写 javac 时,我得到:Undefined function or variable 'javac'.

当我尝试构建 C++ 库时,我遇到了类似的问题:错误:对 mbuild 进行脱壳时发生错误(错误代码 = -1)。 无法构建可执行文件。

编辑:在我的情况下,没有正确的 MCR 算吗?

【问题讨论】:

  • 您使用的是 Windows 7 64 位吗?
  • 是的,我已经安装了jdk-7u71-windows-x64版本的java。
  • MATLAB 命令行窗口中version -java 的输出是什么?
  • Java 1.7.0_11-b21 与 Oracle Corporation Java HotSpot(TM) 64 位服务器 VM 混合模式。嗯,但是我无法在我的路径中找到它。
  • 您是否检查过是否有权写入生成输出的目录?

标签: java matlab javac


【解决方案1】:

我在安装时遇到了非常相似的问题。 我将环境变量(按 > 键入 env > EnterJAVA_HOME(在“用户变量”下)设置为我的 JDK主目录(不是 bin 文件夹),没有任何尾随 \;

出现问题的原因是 MATLAB 无法正确执行 javac,但是,为了准确计算出 MATLAB 试图执行的内容(这不起作用),我们需要使用命令窗口而不是库编译器。 看来您已经完成了此操作,但为了完整起见,我将在此处为其他人添加该过程。

要查找 MATLAB 执行的内容,请单击“打开日志文件”并复制整个第一行。

在 MATLAB 命令窗口中粘贴第一行,并在末尾添加 -v。 按回车键运行命令并注意打印到屏幕上的“Executing command:”。

获得 MATLAB 为您返回的“执行命令”后,检查该命令中的第一个路径并确保它与您的 javac 文件匹配。 在您的原始帖子中,您已完成此操作并发布了

C:\Program Files\Java\Java\jdk1.7.0_11\bin\javac

包含\Java\Java 的路径,如果这不是拼写错误,那么它可能是个问题,因为它不是默认的Java 安装路径。你还说你的安装在

...\Java\jdk1.7.0_71\bin\bin\javac

其中包含\bin\bin,也不是默认的 java bin 安装目录,可能是另一个错字?

如果 javac 的路径完全匹配,您可以尝试将“执行命令”复制并粘贴到操作系统的命令窗口中 (+R > cmd > Enter) 并查找错误。通过这样做,我们可以将自己从 MATLAB 安装中移除,如果仍然存在错误,则可能与 MATLAB 无关。

为了查看其他环境变量是否会导致相同的问题,我在我的环境变量中删除了 Java 安装的所有其他路径(保留JAVA_HOME)。 MATLAB 使用 java 安装的绝对路径,因此它仍然能够仅使用 JAVA_HOME 环境变量使用 javac 进行编译。

【讨论】:

    【解决方案2】:

    你说

    getenv JAVA_HOME 我得到 C:\Program Files\Java\jdk1.7.0_11 而当我写版本 -java 我得到:Java 1.7.0_11-b21

    尝试在 MATLAB 中使用 setenv,文档在此处http://www.mathworks.com/help/matlab/ref/setenv.html

    setenv('JAVA_HOME','C:\Program Files\Java\jdk1.7.0_71');
    setenv('PATH','C:\Program Files\Java\jdk1.7.0_71\bin');
    

    【讨论】:

    • 我的环境变量已经正确了。我尝试了你的方法,但是我得到了同样的错误。错误:脱壳到 javac 时发生错误(错误代码 = -1)。无法构建可执行文件。当我使用 getenv 时,路径和 java_home 都得到了 jdk1.7.0_11。
    • 我猜是java.m文件有问题,这里我想不出其他问题。
    【解决方案3】:

    根据此链接中的答案

    http://www.mathworks.com/matlabcentral/answers/131639-matlab-deploytool-not-working-fails-while-building

    似乎您必须安装 JDK 1.7.0_11-b21,这是您的 MATLAB 版本兼容的用于编译成 jar 的版本。此外,安装该特定版本后,您应该修改 JAVA_HOME 和 PATH 环境变量。试试看是否有帮助。

    【讨论】:

    • 奇怪的是,不到一周,我就可以正常构建jar文件了。
    • 我猜你从来没有经历过 JDK 的一些更新?您的系统还有哪些与 MATLAB 或 Java 相关的变化?
    • Windows 更新唯一的东西。但是,我没有注意到发生了什么变化。
    • 首先,确保使用正确的值更新了 JAVA_HOME 和 PATH。然后重新启动 MATLAB。然后,告诉我 MATLAB 命令行窗口中getenv JAVA_HOME 的输出。
    • 为什么 ""C:\Progra... 以双引号开头?
    猜你喜欢
    • 2016-05-15
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多