2013-02-12 84 views
1

想从这个链接运行示例.cpp文件时编译和Java中运行C程序

Compile and run source code from Java application

我安装了MINGW32编译运行的源代码改变编译器的位置路径,并得到这个错误在Eclipse中。

public class C_Compile { 
    public static void main(String args[]){ 

     String ret = compile(); 
     System.out.println(ret); 

    } 
     public static String compile() 
     { 
      String log=""; 
      try { 
       String s= null; 
       //change this string to your compilers location 
      Process p = Runtime.getRuntime().exec("cmd /C \"C:\\MinGW\\bin\\mingw32-gcc-4.6.2.exe\" C:\\MinGW\\bin\\Hello.cpp "); 

      BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(p.getErrorStream())); 
      boolean error=false; 

      log+="\n....\n"; 
      while ((s = stdError.readLine()) != null) { 
       log+=s; 
       error=true; 
       log+="\n"; 
      } 
      if(error==false) log+="Compilation successful !!!"; 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
      return log; 
     } 


     public int runProgram() 
     { 
      int ret = -1; 
      try 
      {    
       Runtime rt = Runtime.getRuntime(); 
       Process proc = rt.exec("cmd.exe /c start a.exe"); 
       proc.waitFor(); 
       ret = proc.exitValue(); 
      } catch (Throwable t) 
       { 
       t.printStackTrace(); 
       return ret; 
       } 
      return ret;      
     }} 

错误:

mingw32-gcc-4.6.2.exe: error: CreateProcess: No such file or directory 

谁能告诉我在哪里把我的资料来源.cpp文件。谢谢

回答

1

错误消息表明,没有找到gcc编译器本身。 为什么不使用gcc.exe而不是mingw32-gcc-4.6.2.exe呢?如果您更新了MinGW,则后者将失效! 你也不需要在字符串中使用\,当路径中不包含空白字符时

你可以将你的cpp文件放在你想要的任何地方,提供该gcc的路径.exec也应该有一个参数dir,你可以设置你的CPP的目录。

+0

如果gcc在你的PATH环境中(在shell中键入'gcc -v'应该打印类似'Target:mingw32'和版本的东西) - 你也可以简单地执行'cmd/C gcc '。 – 2013-02-12 06:50:33

+0

我用gcc.exe仍然出现同样的错误: 进程p = Runtime.getRuntime().exec(“cmd/C”C:\\ MinGW \\ bin \\ gcc.exe \“Hello.cpp”) ; – 2013-02-12 06:50:52

+0

*相同*错误?或者告诉你一个不同的错误,hello.cpp找不到?正如我所说的,你必须提供你的Hello.cpp路径(它不应该位于你的gcc的bin目录中!如果是这样 - 将它放在一个项目目录中) - 或者你提供的目录是exec-命令为[here](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String [],%20java.lang.String [],%20java.io.File%29):'Runtime.getRuntime()。exec(“cmd/C gcc hello.cpp”,null,new java.io.File(myDirectory));' – 2013-02-12 06:55:16

0
public static void CompileCprog(String filename){ 

     File dir = new File("C://Users//JohnDoe//workspace//Project"); 

     try { 
      String exeName = filename.substring(0, filename.length() - 2); 
      Process p = Runtime.getRuntime().exec("cmd /C gcc " + filename + " -o " + exeName, null, dir); 
//   Process p = Runtime.getRuntime().exec("cmd /C dir", null, dir); 
      BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line = null; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

这完全适用于我。

的“目录”变量可以设置为你想要的任何位置。

的第一个“p”进程编译一个程序并在你正在编译的程序的同一位置产生一个具有相同名称(减去.c)的.exe文件。

如果您的命令有输出,则可以使用缓冲读取器。 如果将命令字符串更改为.exec(“cmd/C dir”);这个结果将被打印在输出中。 (im使用eclipse)