繁体   English   中英

从Java代码运行MSVC编译器会出现错误

[英]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设置INCLUDELIB环境变量:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM