如何在 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++ 中的任何位置编译和运行任何文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在VS2010中运行编译C和C++?

[C++] C++ 的常量究竟是什么? 它与 C# 和 Java 中的常量有什么区别? 应该如何理解常量?

Visual Studio 2010中的Visual C++如何编译、连接和运行?

如何在VSCode内编译运行C++

如何在 Mac 终端中使用 C++11 支持编译 C++

如何将javascript代码编译为c++或java