2012-01-23 6 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をして​​いないことを推測し、そのシェルでhandlyのコマンドを実行してみてください、とあなたが必要とするパラメータとして出力を書き込みます。

+0

もちろん!ありがとう。 – user1164112

関連する問題