0

我有一个文件 app.c,它使用两个库 GStreamer 和 libXml2。要编译应用程序,我在终端上键入以下内容

gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2

当我尝试 Makefile 的内容如下:

all:
        gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) app.c -o app -I/usr/include/libxml2 -lxml2
run:
        ./app
clean:
        rm app

在运行 make 命令时,我得到了预期的错误。有什么意义

$(pkg-config --cflags --libs gstreamer-0.10)

在与上述内容相呼应时,我得到了一些文件,这些文件包含在 Makefile 中时会给我正确的输出。

4

1 回答 1

2

pkg-config --cflags libraryX输出 libraryX 的头文件的路径。没有这个,编译器不知道去哪里找头文件,编译就会失败。

同样,pkg-config --libs libraryX输出 . 的实际编译库文件的路径libraryX。没有这个,链接器不知道在哪里寻找库文件,链接将失败。

pkg-config --cflags --libs libraryX只是结合了我上面描述的内容。由于您使用gcc同时进行编译和链接,您只需将这些参数一起传递给gcc.

于 2010-12-02T13:29:46.527 回答