我正在尝试通过javacode编译C程序。我这样做了。
Process process = Runtime.getRuntime().exec("C:/cygwin/bin/sh -c 'gcc HelloWorld.c -o HelloWorld.exe'");
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line, log;
log ="\n..Input..\n";
while ((line = br.readLine()) != null) {
log+=line;
log+="\n";
}
InputStream is2 = process.getErrorStream();
InputStreamReader isr2 = new InputStreamReader(is2);
BufferedReader br2 = new BufferedReader(isr2);
String line2;
log+="\n..Error..\n";
while ((line2 = br2.readLine()) != null) {
log+=line2;
log+="\n";
}
System.out.println(log);
未创建HelloWorld.exe,并显示以下错误消息。 / usr / bin / sh:gcc:找不到命令
答案 0 :(得分:2)
一个问题是exec(String)
在白色空格字符处天真地将字符串拆分为参数。你需要为它做分裂。将exec
写为:
Process process = Runtime.getRuntime().exec(new String[]{
"C:/cygwin/bin/sh",
"-c",
"gcc HelloWorld.c -o HelloWorld.exe"});
exec(String)
方法不理解shell语法,例如引用和重定向。
可能还需要为gcc
命令使用完整路径名,但我对此表示怀疑。 shell应该从JVM继承环境变量设置,并且可能包含一个合适的PATH
变量。
答案 1 :(得分:0)
您可以获取当前的运行时环境并调用exec方法。这是一个例子:
String cmd="C:/cygwin/bin/sh -c '/usr/bin/gcc HelloWorld.c -o HelloWorld.exe'";
Process process = Runtime.getRuntime().exec(cmd);
答案 2 :(得分:0)
试
/usr/bin/gcc
而不是
gcc
说,在脚本中使用二进制文件调用的完整路径。