一、库是什么?

库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。
静态库文件的扩展名是.a,共享库文件的扩展名是.so

(1)静态库

静态是指每个用到该库的应用 程序都拥有一份自己的库拷贝;应用程序运行的时候,即使将库删除也没有问题,因为应用程序自己已经有了自 己的拷贝

(2)共享库

一个共享库有可能被多个所有应用程序共享。因此,对每个应用程序来说,即使不再使用某个共享库,也不应将其删除。此外,应用程序需要正确的环境变量设置(LD_LIBRARY_PATH),从而找到共享库所在的位置,否则,应用程序运行时会报告找不到这个库。

二、如何使用库?

(1)静态库

  gcc的 命令行参数(-I, -L)
  shell的环境变量(C_INCLUDE_PATH, LIBRARY_PATH)

(2)共享库

  gcc的 命令行参数(-I, -L)
  shell的环境变量(C_INCLUDE_PATH, LIBRARY_PATH,LD_LIBRARY_PATH)

三、如何生成库?

(1)静态库

  gcc -c hello.c 
  ar crv libmyhello.a hello.o
  gcc main.c libmyhello.a -o main

(2)共享库

  gcc -c hello.c
  gcc -shared -fPIC -o libmyhello.so hello.o 
  gcc main.c libmyhello.so -o main

PS:

当静态库和动态库同名时, gcc命令将优先使用动态库

默认情况下,gcc会自动搜索下面的路径:

对头文件:
/usr/local/include/
/usr/include/

对库文件:
/usr/local/lib/
/usr/lib/

最后修改:2021 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏