2012-01-23 1 views
1

Я пытаюсь запустить clang-компиляцию из приложения Java. Он отлично работает, пока я не попытаюсь передать аргумент pkg-config. Например:`pkg-config` аргумент для clang из Java

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.

(баш это сделать, когда вы заключаете команду в полукоксе `)

Я думаю, что Java не имеет, что feauter, поэтому попробуйте запустить эту команду Handly в оболочке, и записать вывод в качестве параметра вам нужно.

+0

Право, конечно! Благодарю. – user1164112