Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1056446
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: 嵌入式

2015-12-09 19:29:07

动态库

动态库

(1)、生成:在链接时,用如下选项:-shared -fpic 如: gcc -fpic -shared -o libtest.so myalib.c

(2)、使用:有隐式使用和显示使用,隐式使用就是共享方式,程序一开始运行就调进去。

       在链接时候用如下:

       gcc -o main main.o -L./lib -ltest    (像静态库的一样)

显示使用就是在程序中用语句把动态库调进来,用系统调用:dlopen、dlsym、dlerror、dlclose函数,那样在编译链接时候,不用加上:-L./lib -ltest了。不过要使用dl*系列函数在编译链接时要加上 -ldl

6、如果同一目录下,既有静态库也有动态库,比如libtest.a libtest.so都存在,那么dl程序(等一下介绍)就把动态库调进去,没有动态的,就找静态的。再没有,就报错。

7、动态库的搜索路径

dl对动态库的搜索路径如下(按顺序如下)

a.编译目标代码时指定的动态库搜索路径;(如果要指定程序行时在./lib目录下找库文件libtest.so,命令如下:gcc -o main main.c -L./lib -ltest -Wl,-rpath ./lib) ,其中,-Wl的意思是,后面的选项直接交给ld程序处理, -rpath 选项是说更改搜索路径为后面的参数./lib

b.环境变量 LD_LIBRARY_PATH 指定的动态库搜索路径;

c.配置文件 /etc/ld.so.conf 中指定的动态库搜索路径;(修改完文件后,用ldconfig更新)

d.默认的动态库搜索路径 /lib和/usr/lib;

8、一些常用的命令(与库有关的)

(1)、ld 是 gcc 的链接程序。

(2)、ldd 是查看可执行文件中所依赖的库的程序,比如想查main程序用到了那些动态库,可以直接
ldd main

(3)、ldconfig 用来更新文件 /etc/ld.so.conf 的修改生效。

(4)、nm 用来查看 .so 库中的函数名字,标记是T的就是动态库里面生成的名字。

       例如:

       nm /lib/libc*.so
阅读(294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~