![](/img/trans.png)
[英]While running my Android studio project, Java compiler gives this error
[英]Running MSVC compiler from Java code gives error
我正在尝试使用Java代码的MSVC2008编译器来编译一些C ++源文件。 例如,我有一个到源文件的路径和一个到ms编译器的路径。 我需要运行编译器并获取可执行文件的路径或错误状态。 但是,到目前为止,我得到的一切都是“未定义包含路径”错误,并且退出状态为2
。
仔细搜索后,我得到了vsvars32.bat
文件路径,该文件路径从原始cmd
运行时修复了此错误。 但是,似乎Java具有自己的环境,与使用ProcessBuilder
运行流程时的操作系统完全不同。
到目前为止,我已经获得了以下代码:
compilerPath = String.format("\"C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin\\cl.exe\" \"%s\"", sourcePath);
ProcessBuilder builder = new ProcessBuilder(compilerPath);
Process process = builder.start();
builder.redirectErrorStream(true);
process.waitFor();
每当我运行它时,它将返回exitValue == 2
和上面提到的错误。
如何解决此问题,以便我可以仅运行cl.exe
并获取可执行文件?
如果cl.exe
仅在PATH中,则可以运行它。 这不是一个Java问题。 这是您的操作系统的配置。
问题在于,您可能无法配置正在运行应用程序的每台计算机的环境。 其他可能的问题是,可能必须在特定目录(例如,项目目录)中执行编译器。
显然,路径中的空间又增加了复杂度。
首先尝试从命令提示符处执行完全相同的操作。 它也可能会失败并显示原因。
如果可行,请返回您的Java代码,但尝试读取cl.exe
的STOUT和STDERR。 我相信它可以打印出一些内容,可以帮助您了解问题所在。
诀窍是为ProcessBuilder
及其Process
设置INCLUDE
和LIB
环境变量:
ProcessBuilder builder = new ProcessBuilder("cl.exe main.cpp /nologo".split("\\s+"));
builder.redirectErrorStream(true);
builder.environment().put("INCLUDE", "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\include;C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Include");
builder.environment().put("LIB", "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\lib;C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Lib");
Process process = builder.start();
process.waitFor();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.