完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、什么是库 本质上来说库是一种可执行代码的二进制形式,可以***作系统载入内存执行。 二、库的种类 linux下的库有两种:静态库和共享库(动态库)。 三、命名方式 静态库:lib库名.a 动态库:lib库名.so 区分一个概念:库是包含前缀lib以及后缀.a或者.so的一个整体 库名是去掉前缀和后缀剩下的部分 四、动态库和静态库的特点 静态库的特点: 1、使用静态库的时候,会将静态库的信息直接编译到可执行文件中 2、优点:当静态库被删除,对可执行文件没有影响 3、缺点:浪费内存空间。如果静态库被修改,可执行程序要重新编译 动态库的特点:加载器在加载动态库时,操作系统会先检查动态库是否因为其它程序已经将这个动态库信息加载到了内存中。如果没有加载到内存中,操作系统会将动态库载入内存,并将它的引用计数设置为1;如果已经加载到内存,仅将动态库的引用计数加1。 五、如何知道一个可执行程序依赖哪些库 ldd命令可以查看一个可执行程序依赖的共享库 例如# ldd + 路径/可执行程序 六、创建静态库和动态库的过程 静态库:a、创建.o文件 b、ar -cr lib库名.a *.o 动态库: a、创建.o文件 要使用-fpic选项 “-fpic”告诉GCC产生的代码不要包含对函数和变量具体内存位置的引用,这是因为现在还无法知道使用该代码的应用程序会将它连接到哪一段内存地址空间。这样编译出的hello.o可以被用于建立共享链接库。 b、 gcc -shared -o lib库名.so *.o 七、如何使用库 静态库: a、如果静态库放在系统目录/lib或者/usr/lib下 执行方式为 gcc main.c -l库名 b、如果静态库没有放在系统目录下则执行方式为执行 gcc main.c -L 静态库路径 -l 库名。或者执行gcc main.c 路径/整个静态库 动态库: a、如果放在系统目录下执行方式为 gcc main.c -l库名 b、如果没有放在系统目录下执行方式分为两种: 第一种:执行 gcc main.c -L 动态库路径 -l 库名,不过这种方式在执行可执行程序的时候可能出现如下错误 ./a.out: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory 解决方式: 1、在/etc/bash.bashrc文件中添加export LD_LIBRARY_PATH=$LD_LRBRARY_PATH:动态库的绝对路径。最后source /etc/bash.bashrc 2、在/etc/ld.so.conf.d目录下创建一个以.conf为后缀的文件,在这个文件中添加上动态库的绝对路径,最后执行sudo ldconfig ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库. 第二种:如果第一种的方式都配置完之后出现如下错误 /usr/bin/ld: cannot find -laddsub collect2: ld returned 1 exit status 这种错误说明编译器找不到需要链接的库,则执行gcc main.c 动态库路径/动态库 内容来源:华清远见嵌入式论坛 |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
3096 浏览 3 评论
1549 浏览 3 评论
4702 浏览 1 评论
2040 浏览 1 评论
3293 浏览 2 评论
534浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 15:48 , Processed in 0.586698 second(s), Total 55, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号