一、本章重点
1、动静态库的制作与使用
2、动静态库的使用
3、动静态库的理解
4、安装两个好玩的库(ncurses、boost)
01 静态库的制作与使用
1、静态库的制作
静态库和动态库其本质都是一群.o文件的打包 ,静态库是将整个代码拷贝到要生成的可执行程序中,而动态库是当进程执行时,将动态库加载到内存中,可供所有进程共享该代码。
![]()
2、静态库的使用
-I:可看作include,指明头文件在哪个目录下。(大I)
-L:可看作library,指明.a文件在哪个目录下。
-l:指明某个.a文件,因为lib目录可能不止一个.a文件。(小l)
用gcc编译的时候也可以不用-I、-L、-l,可以把头文件拷贝至系统路径/usr/include,把.a文件拷贝至系统路径/lib64
02 动态库的制作与使用
1、动态库的制作
![]()
2、动态库的使用
为什么运行mytest的时候找不到动态库在哪?
解释:你只告诉了gcc动态库在哪?但程序运行的时候也需要你告诉它动态库在哪?
解决方法1:将动态库拷贝到系统路径下(/lib64)
解决方法2:导入环境变量(LD_LIBRARY_PATH)
这种方法重新登录xshell就不行,原因在于导入的环境变量是临时的。
解决方法3:修改系统配置文件
在/etc/ld.so.conf.d目录下创建一个.conf的文件,注意后缀需要是.conf。这里我创建的是my_test.conf,然后写入库所在目录的路径。
最后用sudo ldconfg命令更新配置文件信息。
这种方式是永久有效的,重启xshell也能运行mytest。
解决方法4:软链接方案
在/lib64创建一个libmymath.so的文件,该文件指向.so的库文件。
03 静态库与动态库的理解
1、静态库在程序编译阶段就将代码拷贝至可执行程序里面。
优点:不依赖库
缺点:浪费内存和磁盘空间
2、动态库是在链接阶段将地址填写到可执行程序调用的地方,当可执行程序运行时,动态库会被加载到内存,动态库的代码可供多个进程共享。
优点:节省内存和磁盘空间
缺点:依赖库,删除库后无法正常运行。
3、共享区的理解
04 安装两个好玩的库(ncurses、boost)
1、sudo yum install -y ncurses-devel
2、sudo yum install -y boost-devel