链接库

Posted steven-dou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链接库相关的知识,希望对你有一定的参考价值。

链接库

       Linux下,大多数函数的头文件的默认路径是/usr/include/,而库文件的默认路径是/usr/lib/,但并不是所有的情况都是这样的。因此,在使用gcc编译时,必须为其制定所需要的头文件和库文件的路径。

       gcc采用搜索目录的办法来查找所需要的文件,-I选项可以向gcc的头文件搜索路径中添加新的目录。例如在当前目录下已成功编写了C程序文件foo.c,而在/home/zhangfan/inlude/目录下有编译该程序时所需要的文件,为了让gcc能够顺利找到他们,就可以使用-I选项:

   #gcc foo.c -I /home/zhangfan/inlude -o foo

       同样,如果使用了不在标准位置的库文件,那么可以通过使用-L选项向gcc的库文件搜索路径中添加新的目录。如果在/home/zhangfan/lib/目录下有foo.c程序链接时所需要的库文件libfoo.so,为了让gcc能够顺利的找到它们,并成功编译成可执行文件foo,可以使用以下命令:

  #gcc foo.c -L /home/zhangfan/lib -lfoo -o foo

 在上面的编译命令中,gcc对“-lfoo”字串进行处理时,会自动去链接名为libfoo.so的文件。

       Linux下的库文件分为两大类,分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),两者的差别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。默认情况下,gcc在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库。可以在编译时加上-static选项,强制使用静态链接库。如:在/home/zhangfan/lib/目录下有链接时所需要的库文件libfoo.so和libfoo.a,为了在链接时只用到静态链接库,而不是用动态链接库,可以使用如下命令:

  #gcc foo.c -L /home/zhangfan/lib -static -lfoo -o foo

 

以上是关于链接库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cmake生成基于静态库的动态链接库

Makefile 链接静态库

gcc 编译使用动态链接库和静态链接库

静态链接库和动态链接库

动态链接库和静态链接库的区别

动态链接库和静态链接库