编译fuse的命令 gcc myfuse.c -o myfuse `pkg-config fuse --cflags --libs`
中的 pkg-config fuse --cflags --libs 是什么东西呢?
原来是提供fuse库及图文件的路肩。
直接在命令行打 pkg-config fuse --cflags --libs 结果是:
-D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread -lfuse
其中 -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse 是 --cflags的结果,,-I是头文件的搜索路径. -pthread -lfuse是--libs的结果,-lfuse是使用fuse库。
对于每一个安装的包,都会生成一个.pc文件, pkg-config fuse --cflags --libs 就是读取 fuse.pc文件,那么这个文件在哪呢?
一般来说, pkg-config 默认会搜索一些路径下的.pc文件,也可以用 PKG_CONFIG_PATH 环境变量额外添加路径。
下面我们就来找fuse.pc
首先查找所有的pkgconfig目录,sudo find /usr -name "*pkgconfig*" -type d -prune -print,结果是:
/usr/local/lib/pkgconfig
/usr/local/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/openmpi/lib/pkgconfig
/usr/share/pkgconfig
我们一个个列出这些路径下的文件,最终在 /usr/lib/x86_64-linux-gnu/pkgconfig 下面找到了 fuse.pc
后来又发现编译fuse-2.9.2后是在/usr/local/lib/pkgconfig下面。
一般来说,通过apt-get安装的软件包,可以通过dpkg -l列出来,使用grep列出特定包。但是通过编译源文件make install的包就不能通过此方法列出来,因为没有经过系统包管理软件的追踪。
但是,一般可以通过pkg-config --list-all 列出来。
比如使用上面方法安装fuse-2.9.2后,可以通过pkg-config --list-all 列出来,如果再make uninstall卸载掉后,pkg-config --list-all 就不再显示。
原理应该是安装操作安装了.pc文件。卸载操作将 .pc文件删除。