前言
最近学到了静态库和动态库的相关知识,就顺便整理了一下相关题目。如果对静态库和动态库知识不熟悉的同学,推荐看这篇文章——《静态库与动态库》,讲的很详细。
第一题
关于静态库与动态库的区别,以下说法错误的是()
A---加载动态库的程序运行速度相对较快
B---静态库会被添加为程序的一部分进行使用
C---动态库可用节省内存和磁盘空间
D---静态库重新编译,需要将应用程序重新编译
正确答案:A
解析:动态库的函数到实际使用的时候才加载到内存中,所以运行速度相对较慢。
第二题
静态库和动态库如何制作及使用,区别是什么?
参考答案:
1.静态库制作和使用
-命名: libxxx.a
-制作: 1.获得.o文件 gcc -c xxx.c xxx.c
2.将.o文件打包 ar rcs libxxx.a xxx.o xxx.o
-使用:gcc 源文件 -o 目标文件 -I 头文件路径 -L 库文件路径 -lname -static
2.动态库的制作与使用
-命名: libxxx.so
-制作: gcc -shared -fPIC -o libxxx.so xxx.c xxx.c
-使用: 1.gcc 源文件 -o 目标文件 -I 头文件路径 -L 库文件路径 -lname
2.配置加载路径:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: 动态库所在的绝对路径
3.静态库和动态的区别
静态库 gcc 进行链接时,会把静态库中代码打包到可执行程序中,编译时加载;发布程序时无需提供静态库,移植方便;消耗内存,更新部署发布麻烦。
动态库 gcc 进行链接时,动态库的代码不会被打包到可执行程序中,运行时加载;发布程序时需要提供动态库;内存占用小,更新部署发布简单。
第三题
请你说说动态库静态库的优缺点?
参考答案:
1、静态库
优点:
①静态库被打包到应用程序中加载速度快
②发布程序无需提供静态库,移植方便
缺点:
①相同的库文件数据可能在内存中被加载多份,消耗系统资源,浪费内存
②库文件更新需要重新编译项目文件,生成新的可执行程序,浪费时间。
2、动态库
优点:
①可实现不同进程间的资源共享
②动态库升级简单,只需要替换库文件,无需重新编译应用程序
③可以控制何时加载动态库,不调用库函数动态库不会被加载
缺点:
①加载速度比静态库慢
②发布程序需要提供依赖的动态库