通常来说gcc在编译链接linux环境下的c语言代码时会在/lib和/usr/lib中去寻找对应的库文件,如果库文件没有这两个位置的时候则需要将库文件信息添加到库文件搜索路径中,可以通过如下两种方法来设置库文件的搜索路径:
1. 在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。
2. 在 /etc/ld.so.conf 文件中添加库的搜索路径。
在gtk+的编译中会使用如下的编译参数`pkg-config --cflags --libs gtk+-2.0`,其中pkg-config是一个管理工具(库信息提取工具),用于向用户/程序提供相应的库路径、版本号等信息,其利用库提供者提供的.pc文件实现了如下几个功能:
1、检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2、获得编译预处理参数,如宏定义,头文件的位置。
3、获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
4、自动加入所依赖的其它库的设置。
其最主要的功能是当安装完库之后用户可以不管这个库的所有位置而直接使用相同的命令进行编译,pkg-config工具会自行去找到库的所在。
gtk+的编译的参数--cflags用于给出编译时的选项,而-libs用于给出链接时的选项
.pc文件保存位置在usr/lib/pkgconfig下
alloy@ubuntu:/usr/lib/pkgconfig$ ls
camel-1.2.pc gmime-2.6.pc libedataserver-1.2.pc mozjs185.pc
camel-provider-1.2.pc gnome-bluetooth-1.0.pc libedataserverui-3.0.pc mutter-plugins.pc
clutter-gtk-1.0.pc gnome-desktop-3.0.pc libgdiplus.pc nautilus-sendto.pc
dbus-python.pc gobject-introspection-1.0.pc libgnomekbd.pc notify-python.pc
enchant.pc gobject-introspection-no-export-1.0.pc libgnomekbdui.pc pm-utils.pc
evince-document-3.0.pc gtk-dotnet-2.0.pc libgnome-menu-3.0.pc pygobject-2.0.pc
evince-view-3.0.pc gtkmm-3.0.pc libgtkhtml-4.0.pc pygobject-3.0.pc
evolution-data-server-1.2.pc gtk-sharp-2.0.pc libgtop-2.0.pc python-2.7.pc
fontutil.pc gucharmap-2.90.pc libical.pc python2.pc
gck-1.pc gweather-3.0.pc libmutter.pc python.pc
gcr-3.pc ibus-table.pc libnautilus-extension.pc telepathy-farstream.pc
gdkmm-3.0.pc libbrasero-burn3.pc libnm-util.pc telepathy-glib.pc
ginn.pc libbrasero-media3.pc libpanelapplet-4.0.pc totem-plparser-mini.pc
gjs-1.0.pc libebackend-1.2.pc libpeas-1.0.pc totem-plparser.pc
gjs-dbus-1.0.pc libebook-1.2.pc libpeas-gtk-1.0.pc vte-2.90.pc
gjs-internals-1.0.pc libecal-1.2.pc libquvi-scripts.pc xorg-wacom.pc
gladeui-2.0.pc libedata-book-1.2.pc libwnck-3.0.pc xres.pc
glib-sharp-2.0.pc libedata-cal-1.2.pc libxklavier.pc
alloy@ubuntu:/usr/lib/pkgconfig$ pkg-config --cflags glib-2.0
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include