2012-01-23 25 views
1

我試圖從Java應用程序運行clang編譯。它工作得很好,直到我嘗試並通過pkg-config參數。例如:來自Java的clang的`pkg-config`參數

clang -I/usr/lib/gcc/x86_64-linux-gnu/4.6/include `pkg-config --cflags --libs gtk+-2.0` -o file.o main.c 

一條類似於這條線的線完美地從終端工作,但是從Java失敗。 Clang報告「沒有這樣的文件或目錄:'pkg-config --cflags --libs gtk + -2.0''錯誤。

我使用下面的代碼來啓動編譯:

List<String> cmd = new LinkedList<String>(); 
cmd.add("clang"); 
cmd.add("-I/usr/lib/gcc/x86_64-linux-gnu/4.6/include"); 
cmd.add("`pkg-config --cflags --libs gtk+-2.0`"); 
cmd.add("-o"); 
cmd.add("file.o"); 
cmd.add("main.c"); 

Process proc = Runtime.getRuntime().exec(cmd.toArray(new String[0])); 
... 

任何想法,爲什麼它工作正常,從終端,但完全相同的線路出現故障時被從Java叫什麼名字?

回答

1

pkg-config不是一個參數,而是一個查找所需文件的命令。

當你從bash運行它時,它首先運行命令pkg-config --cflags --libs gtk+-2.0,然後將輸出作爲參數傳遞給clang。

(bash中做到這一點,當你在焦炭`包裝指令)

我想,Java有沒有那麼feauter,所以儘量跑在shell命令handly,並寫入輸出你需要的參數。

+0

當然!謝謝。 – user1164112