我熟悉编译和链接程序的非常简单的g ++命令,但是在使用GTK +时我发现教程表明我应该使用pkg-config --cflags gtk+-2.0
现在当我在终端输入pkg-config --cflags gtk+-2.0
时,我得到一个像这样的库和文件列表......
-pthread -I / usr / include / gtk-2.0 -I / usr / lib / x86_64-linux-gnu / gtk-2.0 / include -I / usr / include / atk-1.0 -I / usr / include / cairo -I / usr / include / gdk-pixbuf-2.0 -I / usr / include / pango-1.0 -I / usr / include / gio-unix-2.0 / -I / usr / include / glib-2.0 -I / usr /lib/x86_64-linux-gnu/glib-2.0/include -I / usr / include / pixman-1 -I / usr / include / freetype2 -I / usr / include / libpng12 -I / usr / include / harfbuzz
所以我的问题是, -I 在目录前面是什么意思?例如-I/usr/include/libpng12
答案 0 :(得分:2)
-I
标志用于将目录添加到目录列表中,以搜索#include <>
语句中的查找文件。
在您的情况下,当使用#include
包含文件时,/usr/include/libpng12
将成为预处理器搜索文件的目录之一。
答案 1 :(得分:2)
答案 2 :(得分:2)
-I
只是添加要搜索头文件的路径。请注意,在系统路径之前搜索这些内容。
您可以找到gcc/g++
here的几乎所有选项。在这种情况下,您需要具体的目录搜索选项;见here。从该页面:
-Idir
将目录dir添加到目录列表的头部 搜索头文件。这可以用于覆盖系统 头文件,替换您自己的版本,因为这些目录 在系统头文件目录之前搜索。但是,你 不应使用此选项添加包含的目录 供应商提供的系统头文件(使用--isystem)。
如果您使用多个-I选项,则会扫描目录 从左到右的顺序;标准系统目录之后。如果一个 标准系统包括目录或指定的目录 -isystem也使用-I指定,忽略-I选项。仍然搜索该目录,但作为正常的系统目录 系统中的位置包括链。这是为了确保GCC的 程序来修复错误的系统标题和订单 include_next指令不会无意中更改。如果你真的 需要更改系统目录的搜索顺序,使用 -nostdinc和/或-isystem选项。
答案 3 :(得分:0)
正如@R Sahu @Klaus和@Yuushi的回答所解释的,-I dir
告诉编译器在哪里寻找#include header.h
文件。
程序编译后,将被链接。您可能还需要告诉链接器在哪里可以找到支持#included标头中的功能的程序。这是通过-llibrary
标志完成的。这是一个小写字母l,而不是一(1)。
pkg-config命令引用了一组文件,如果提供了软件包名称,将提供编译器标志--cflags
和链接标志--ldflags
。
在您的编译命令请求中,将返回的-包括在源名称之前,并将-l放在之后。
对于非一次性的一次性程序,应使用make。可以将cflag和ldflag信息放入Makefile
中的变量中,并在整个make脚本中进行引用。
您可以使用locate *.pc