如何在 C、java 和 C++ 中的任何位置编译和运行任何文件?
Posted
技术标签:
【中文标题】如何在 C、java 和 C++ 中的任何位置编译和运行任何文件?【英文标题】:How to compile and run any file at any location in C,java and C++? 【发布时间】:2012-02-08 09:45:06 【问题描述】:我正在创建一种编辑器类型的应用程序,我想在其中编译和运行(当然也可以创建、编辑、打开)C、C++ 和 Java 文件; 我正在用 Java 创建它。
现在为了编译和运行,我正在使用文件的整个路径 并通过此完整路径编译和运行。
例如。
compileFileCommand = javac /media/disk/eclipse/\/UniversalIDE/Java/FirstJava.java
try
System.out.println("Compiling Java File");
Process compileProcess = Runtime.getRuntime().exec(compileFileCommand);
compileProcess.waitFor();
String line = "";
BufferedReader bri = new BufferedReader(new InputStreamReader(compileProcess.getInputStream()));
BufferedReader bre = new BufferedReader(new InputStreamReader(compileProcess.getErrorStream()));
while ((line = bri.readLine()) != null)
System.out.println(line);
bri.close();
while ((line = bre.readLine()) != null)
System.out.println(line);
bre.close();
compileProcess.waitFor();
System.out.println("Done Java Compile.");
catch (Exception e)
// TODO: handle exception
System.out.println("Exception in Java Compile. ");
System.out.println(e.getMessage());
上面的代码工作正常,并在 java 文件的位置创建了一个类文件。但是 bri.readLine() 总是包含 null。
用于运行 Java 文件
runFileCommand = java /media/disk/eclipse/\/UniversalIDE/Java/FirstJava
对于运行 C 和 CPP 文件的过程相同
用于 C 编译
String compileFileCommand = "gcc " + fileNameWithFullPath;
对于 C 运行
String runFileCommand = "./" + fileNameWithFullPath.split(".c")[0];
用于 CPP 编译
String compileFileCommand = "g++ " + fileNameWithFullPath;
对于 CPP 运行
String runFileCommand = "./" + fileNameWithFullPath.split(".cpp")[0];
我使用与编译 java 文件相同的代码,但它没有给出任何结果,并且 bri.readLine() 始终给出 null。
请帮我解决这个问题,请给我关于我的应用程序的任何建议。
【问题讨论】:
如果错误太多并且缓冲区已满,编译器将停止,因为您在程序完成之前不读取错误,即您有死锁。我会将错误打印到 System.err。 【参考方案1】:gcc 和 g++ 的默认输出文件名是a.out
,而不是没有扩展名的输入文件名。
尝试runFileCommand = "./a.out"
,或使用-o
选项和gcc/g++ 来指定输出文件名。
当没有错误或警告时,任何编译命令都不会输出任何内容。
【讨论】:
【参考方案2】:bri.readLine()
返回 null,因为当 Java 文件编译时没有错误,没有任何内容被打印到标准输出。是这个问题吗?
【讨论】:
以上是关于如何在 C、java 和 C++ 中的任何位置编译和运行任何文件?的主要内容,如果未能解决你的问题,请参考以下文章
[C++] C++ 的常量究竟是什么? 它与 C# 和 Java 中的常量有什么区别? 应该如何理解常量?