在Linux中,如果想要使用自定义的库文件,就需要在使用gcc时额外指定三个参数:
因此,我们在使用自定义库文件时,就可以像下面这种:
gcc -o myproc fun.c -I mylib/include/ -l mylib -L mylib/lib/
而在Linux中,系统标准目录中的库文件(包含动态库和静态库)是放在对应的lib目录下的,即规定32位的可执行程序用到的库文件放在 /usr/lib/ 目录下,64位的可执行程序用到的库放在 /usr/lib64/ 目录下,其中根目录下的 /lib 和 /lib64 分别是 /usr/lib/ 和 /usr/lib64/ 的软链接。此外,系统中的头文件是统一放到 /usr/include/ 目录下的。
也就是说,操作系统在用到对应的库文件时,就会到指定的lib目录下去找,32位程序到 /usr/lib 目录下找,64位程序到 /usr/lib64 目录下找,头文件到 /usr/include/ 目录下找。如果在编译链接过程中,在对应的目录下没有找到所用到的头文件或库文件,那么此时就会异常出错。
所以,很多时候我们可以把一些常用的动静态库或者头文件放到对应的系统目录下,这样在使用时系统就可以检索的到了。实际上,某些库文件的安装其实就是这个原理。
当我们将自定义的库文件及头文件添加到对应的系统目录下之后,我们在编译链接可执行程序时,指令就相对就比较简洁了,只需要使用 -l 选项指定对应的库文件即可。
gcc -o myproc fun.c -lmylib
不过要想对 /usr/ 目录下的内容进行修改,是需要root权限的,这点需要注意。
需要注意的是,动态库链接的可执行程序在运行时需要额外加载动态库。