java - 来自 Java 的 clang 的 `pkg-config` 参数

标签 java c bash compiler-errors clang

我正在尝试从 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/

相关文章:

java - Android - GridView setSelection 不工作

具有自定义数据的 C 二叉搜索树

c - 为什么我的矩阵没有相加?

bash - 从长文本中提取字符串

bash - 根据内容将输入拆分为多个输出?

macos - Mac OS X 上的 Awk strftime

java - jNetPcap sendPacket() 函数复制帧

java - 如何将具有多个参数的对象的单个参数添加到该对象的数组列表中的字符串中?

java - 如何检查时间是否在一个范围内?

c++ - 哪些真实平台将硬件端口映射到内存地址?