库:
库文件其实是目标文件的集合,可以被其他代码所调用的,目的是把代码封装成库文件后方便使用,方便管理、安全性高、保密性强。
静态库:调用静态库其实就是把静态库中的二进制指令拷贝到可执行文件中。
优点:相对而言静态库运行速度更快,不需要依赖静态库文件。
缺点:可执行文件较大,当静态库文件修改后,可执行文件需要重新编译。
共享库:就是带入口的可执行文件,调用共享库时其实就是跳转到共享库二进制指针的位置即可,所以可执行文件执行时,共享库会被一起加载到内存中。
优点:可执行文件较小,当共享库文件修改后,可执行文件不需要重新编译即可使用。
缺点:运行速度比静态库慢,可执行文件运行时需要依赖共享库文件
制作静态库:
1、编译出目标文件
gcc -c code.c
2、打包目标问价生成静态库
ar -r libxxx.a a.o b.o c.o …
使用静态库:
1、直接使用(在同一目录下)
gcc code.c libxxx.a
2、指定库文件的加载位置(xxx是libxxx.a去掉前缀和后缀)
gcc code.c -Lpath -lxxx
3、通过设置环境变量来指定静态库文件的查找路径
打开系统配置文件:vim ~/.bashrc
在文件末尾添加:
export LIBRARY_PATH=$LIBRARY_PATH:path
保存并退出,重新加载配置文件:
source ~/.bashrc
使用静态库: gcc code.c -lxxx 即可
注意:如果删除环境变量,许哟啊关闭终端,重新打开才删除成功
共享库:
制作共享库:
1、编译出目标文件
gcc -c -fpic code.c
2、打包目标文件生成共享库
gcc -shared -fpic code.o -o libxxx.so
使用共享库:
1、直接使用
gcc code.c libxxx.so
注意:./a.out失败是因为执行共享库时默认的查找路径是/lib
2、指定库文件的查找路径
gcc code.c -Lpath -lxxx
3、通过设置环境变量来指定共享库文件的查找路径
打开系统配置文件:vim ~./bashrc
在文件的末尾添加:
export LIBRARY_PATH=$LIBRARY_PATH:path
保存并退出,重新加载配置文件:
source ~/.bashrc
使用共享库:
gcc code.c -lxxx