我正在尝试从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调用时完全相同的行失败了?
答案 0 :(得分:1)
pkg-config
不是参数,而是查找所需文件的命令。
当你从bash运行它时,它首先运行命令pkg-config --cflags --libs gtk+-2.0
,然后将输出作为参数传递给clang。
(bash在char`中包装命令时执行此操作)
我猜Java还没有那么fe,所以尝试在shell中手动运行该命令,并将输出写为您需要的参数。