面试中问到动态库和静态库相关知识

1.动态库相比较于静态库的优缺点?

        动态库优点:节省内存和代码重用,当应用程序使用动态链接库时,多个应用程序可以共享磁盘上的DLL(windows)和so(linux)副本,可实现多个进程间资源共享

        动态库缺点:加载速度比静态库慢

        静态库优点:静态库被打包到应用程序中加载速度快、移植方便

        静态库缺点:消耗系统资源

2.如何生成动态库

        1.    gcc -c -fpic *.c  得到目标文件

        2.    gcc  -shared *.o -o lib***.so  生成动态库

3.如何链接动态库

        gcc main.c -o main -I include/ -L lib/ -l calc

4.动态库和可执行二进制文件放在那里?

        动态库必须和可执行二进制文件放在一起否则会报错

介绍一下关于库

库是计算机上的一类文件,可以看成代码仓库。是特殊的一种程序,只是库不能单独运行

库文件有两种:静态库和动态库(共享库)。区别是静态库在程序的链接阶段被复制到程序中;动态库在链接阶段没有被复制到程序中,而是在程序运行是系统动态加载到内存中供程序调用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 什么是静态库?什么是动态库? - 静态库是在编译时被链接到可执行文件中的库,它包含了所有的函数和数据,因此可执行文件较大,但运行时不需要加载额外的库文件。 - 动态库是在程序运行时被加载的库,它包含了多个可执行文件可以共享的函数和数据,因此可执行文件较小,但需要在运行时加载额外的库文件。 2. 静态库动态库的优缺点是什么? - 静态库的优点是可靠性高,因为所有的代码都被编译到可执行文件中,不需要额外的库文件。缺点是可执行文件较大,占用磁盘空间较大,且无法在运行时更新库文件。 - 动态库的优点是可执行文件较小,因为共享库文件可以被多个可执行文件共享。缺点是依赖性高,因为需要在运行时加载库文件,如果缺少或版本不匹配会导致程序无法运行。 3. 动态库的加载过程是怎样的? - 当程序需要访问动态库中的函数或数据时,操作系统会检查可执行文件的依赖关系,加载动态库文件到内存中,并在符号表中查找相应的函数或数据。 - 如果找到了相应的函数或数据,程序就可以调用库函数或访问库数据。如果没有找到,操作系统会抛出未定义符号的错误。 4. 如何编译静态库动态库? - 编译静态库可以使用命令"ar"和"ranlib",例如: ``` gcc -c file1.c file2.c ar rcs libmylib.a file1.o file2.o ``` - 编译动态库可以使用命令"gcc"和"-shared"选项,例如: ``` gcc -c -fpic file1.c file2.c gcc -shared -o libmylib.so file1.o file2.o ``` 5. 如何使用静态库动态库? - 使用静态库可以在编译时链接库文件,例如: ``` gcc -o myprog main.c -L/path/to/lib -lmylib ``` - 使用动态库可以在程序运行时加载库文件,例如: ``` LD_LIBRARY_PATH=/path/to/lib ./myprog ``` 6. 如何避免动态库版本不匹配的问题? - 在编译动态库时,可以使用版本号来标识不同的库版本,例如: ``` gcc -shared -Wl,-soname,libmylib.so.1 -o libmylib.so.1.0.0 file1.o file2.o ``` - 在程序中调用库函数时,可以使用版本号来指定库版本,例如: ``` dlopen("libmylib.so.1", RTLD_NOW); ``` 这样可以确保程序使用正确的库版本,并避免版本不匹配的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟道xn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值