我正在尝试从 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 调用时完全相同的行却失败了吗?
最佳答案
pkg-config
不是一个参数,而是一个找到你需要的文件的命令。
当您从 bash 运行它时,它首先运行命令 pkg-config --cflags --libs gtk+-2.0
,然后将输出作为参数传递给 clang。
(bash 在将命令包装在 char ` 中时执行此操作)
我猜 Java 没有那么好,所以尝试在 shell 中手动运行该命令,并将输出写入您需要的参数。
关于java - 来自 Java 的 clang 的 `pkg-config` 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8965986/