2012-06-26 74 views
3

我想通過javacode編譯C程序。我做了如下。通過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

您可以獲得當前運行時環境和調用exec方法。這裏有一個例子:

String cmd="C:/cygwin/bin/sh -c '/usr/bin/gcc HelloWorld.c -o HelloWorld.exe'"; Process process = Runtime.getRuntime().exec(cmd);

+0

這沒有幫助。閱讀javadoc中的'exec(String)'以瞭解它如何將字符串拆分爲參數。 –

0

嘗試

/usr/bin/gcc 

而不是

gcc 

說,二進制文件在腳本中調用使用完整路徑。

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的環境變量設置,並且可能包含一個合適的變量。

+0

嘗試過......此時未顯示錯誤消息。控制檯上未顯示任何內容。 HelloWorld.exe也沒有被創建。 – Taani

+0

嘗試一些實驗。 1)嘗試從Windows命令提示符運行命令。 2)用「cat HelloWorld.c」或「ls -l HelloWorld.c」或「ls -ld」替換「gcc HelloWorld.c -o HelloWorld.exe」。 –