| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux系统下的静态库和动态库 -> 正文阅读 |
|
[系统运维]Linux系统下的静态库和动态库 |
一、两种库的定义和差异1、静态库:? ? ? ? 静态库是以libxxx.a命名的库文件(也是一种二进制可执行的代码文件),在编译源程序的时候,如果包含了静态库,则会把整个静态库的数据都编译进程序文件。 2、动态库:? ? ? ? 动态库是以libxxx.so命名的库文件,与静态库不同,如果源程序使用的是动态库,则不会把库的数据编译进程序,而是当程序运行到某个与动态库相关的函数时,再根据动态库留下的标记,进入动态库中寻找资源。 3、两者的区别:? ? ? ? 由于静态库在编译程序阶段就把整个库编进去了,所以使用静态库的可执行程序会比较大。为了节省空间,如果在没有指定的情况下,linux在链接阶段通常会优先使用动态库。但是由于静态库的资源都在可执行程序的内部,所以会有更快的执行速度。这是一个时间换空间的概念,两种库的选择需要具体分析,如果库文件比较大,而且不需要很快的执行速度,尽量选择动态库。对于速度要求较高的程序,比如开机启动程序等,则更推荐使用静态库。 二、静态库的制作1、准备好两个源码文件(即要作为静态库资源的文件)这里以source1.c和source2.c为例: ?其内容分别为两个输出字符串的函数:
2、将这两个源文件生成目标文件
3、使用ar命令制作静态库
此外使用??ar -t 库名称? ?可以查看某个库的依赖文件 4、将静态库编译进可执行程序
将静态库编译进可执行程序,需要在编译的时候加入 -L参数来指定库文件。 值得一提的是,如果可执行程序的源代码中如果没有对库文件内函数的声明,如下:
在编译的时候,会报错函数未定义
在文件中加入对所用库函数的声明之后,成功编译和执行:
三、动态库的制作?1、ldd命令的使用?使用ldd命令可以查看一个可执行程序使用了哪些.so(动态库)文件.。 2、关于配置文件? ? ? ? a、配置文件/etc/ld.so.conf里面存放内容为: ????????
? ? ? ? 在/etc/ld.so.conf.d中存放着很多的配置文件。 ? ? ? ? b、/etc/ld.so.cache文件包含了在/etc/ld.so.conf中指定的目录中查找到所有连接库。按顺序 存储。我们需要将创建的共享库加进这个文件。 ? ? ? ? c、ldconfig命令 ? ? ? ? 使用ldconfig+目录名,可以将这个目录下的动态链接库被系统共享。但是这个命令是搜索/lib和/usr/lib,以及配置文件/etc/ld.so.conf里所列的目录下搜索可用的动态链接库文件的。所以我们需要将我们自己开发的库加进/lib,/usr/lib目录下,或者修改配置文件/etc/ld.so.conf?,将我们的库的路径加进去,再执行ldconfig命令,才能成功将库共享。 3、制作动态库? ? ? ? a、准备好源文件????????
?b、? 使用gcc命令生成.so文件
c、将动态库和可执行程序链接? ? ? ? 步骤和静态库的链接一样
d、解决找不到.so文件的问题①、设置环境变量
也可以用以下方法:
这样在需要在同一个终端内多次执行程序时,不用输入那么长的命令。但是这样设置的环境变量也只能用于那个终端。 ②、将库添加到/lib或者/usr/lib下,或者将路径添加到/etc/ld.so.conf里面 ? ? ? ? 这个在前面有提到,详见三.2 以上是对静态库和动态库的浅显理解,希望以后有更多了解后能来更正和增加。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 19:59:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |