一、库是什么?
库(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/