Linux系统中程序库文件简介 1动态库 2静态库 3共享库 linux应用程序开发过程中用到的库 以及用到库的哪些函数 在linux应用程序开发过程中经常遇到找不到库而报错的情况

Linux系统中程序库文件简介

Linux系统中程序库文件简介
简介
库文件一般就是编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,或者运行可执行文件的时候调用库文件的某段代码。它与可执行文件相同之处是:两者都是编译好的二进制文件;与可执行文件不同的是,库文件无法直接执行(直观上来看它的源代码中没有main函数,一般只是一些函数模块的定义和实现)。我们开发的程序,无论是程序运行的时候,还是编译、链接的时候,一般都需要借助一些库,而很少直接只通过程序源代码生成完全独立的可执行文件。有许多著名的常用的用于开发或者程序运行的库,例如Qt库,gtk库,甚至是标准C库等等,通过使用它们可以充分体会到模块化编程和代码重用等的好处。本文对Linux库的编译,生成,使用进行了介绍,并且通过一个简单例子(开发自己的库)进行说明。

主要内容
原理
举例
其它

[原理]
为便于理解,我们可以将库分为三种类型:静态库,共享库,动态加载库,。下面分别介绍。
一、 静态库:
静态库实际就是一些目标文件(一般以.o结尾)的集合,静态库一般以.a结尾,只用于链接生成可执行文件阶段。具体来说,以c程序为例,一般我们编译程序源代码的时候,过程大致是这样的:以.c为后缀的源文件经过编译生成.o的目标文件,以.o为后缀的目标文件经过链接生成最终可执行的文件。我们可以在链接的时候直接链接.o的目标文件,也可以将这些.o目标文件打包集中起来,统一链接,而这个打包生成的集中了所有.o文件的文件,就是静态库。静态库只在程序链接的时候使用,链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中。一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了。由于每个使用静态库的应用程序都需要拷贝所用函数的代码,所以静态链接的文件会比较大,多个程序运行时占用空间比较大(每个程序在内存中都有一份重复的静态库代码),当然由于运行的时候不用动态加载了,速度会比共享库快一些。
我们可以在后面的例子中看到静态库的生成和应用的具体过程。

二、共享库:
1、共享库的概念:
共享库以.so结尾. (so == share object) 在程序链接的时候并不像静态库那样拷贝库中使用的函数代码到生成的可执行文件中,而只是作些标记。然后在程序开始启动运行的时候,动态地加载所需模块。所以,应用程序在运行的时候仍然需要共享库的支持。共享库链接出来的文件比静态库要小得多,运行多个程序时占用内存空间比静态库少(因为内存中只有一份共享库代码的拷贝),由于有一个动态加载的过程所以速度稍慢。
三、 动态加载库

  1. 概念
    动态加载库(dynamically loaded (DL) libraries)是指在程序运行过程中可以加载的函数库。而不是像共享库一样在程序启动的时候加载。DL对于实现插件和模块非常有用,因为他们可以让程序在允许时等待插件的加载。在Linux中,动态库的文件格式跟共享库没有区别,主要区别在于共享库是程序启动时加载,而动态加载库是运行的过程中加载。
    有专门的一组API用于完成打开动态库,查找符号,处理出错,关闭动态库等功能。
    https://blog.csdn.net/nciaebupt/article/details/8476034?ops_request_misc=&request_id=&biz_id=102&utm_term=linux%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%E8%BF%87%E7%A8%8B%E4%B8%AD%E7%94%A8%E5%88%B0%E7%9A%84%E5%BA%93&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-8476034.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187

linux找不到动态链接库 .so文件的解决方法

如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形。 可以通过ldd命名来查看可执行文件依赖的动态链接库,如下(其中D为可执行程序):

https://blog.csdn.net/gx19862005/article/details/48528235?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.pc_relevant_default&utm_relevant_index=5

Linux程序运行找不到动态库.so文件的三种解决办法

https://blog.csdn.net/u010333084/article/details/86506361?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7.queryctrv2&utm_relevant_index=8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学无止境2022

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

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

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

打赏作者

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

抵扣说明:

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

余额充值