Linux链接库使用问题

[KEY WORDS: 库依赖 搜索路径 搜索顺序]

1.    链接静态库的顺序问题

若多个库有依赖关系,则库之间的链接顺序需要注意:
snmp++库使用到了des库,即snmp++库依赖des库,那么链接时就要注意顺序了, 应该使用链接选项 -lsnmp++.so -ldes.a,而不是 -ldes.a -lsnmp++.so(会报错找不着库), 在连接snmp++库时一旦遇到不认识的符号会到后面的库(此处即des库)中搜寻。

2.    动态库的缺省搜索路径

Linux动态库的默认搜索路径为/lib和/usr/lib。动态库被创建之后,通常复制到这两个目录下(需root权限), 这样当程序执行时就可以到这两个目录下搜索加载。

3.    指定动态库搜索路径

除了缺省的动态库搜索路径,另有三种方法指定搜索路径:
------设定LD_LIBRARY_PATH环境变量------
设定此环境变量也可以指定动态库的搜索路径,类似设置LD_LIBRARY_PATH=/usr/local/lib;/home/inms/lib
注意多个路径之间冒号:隔开,程序执行过程中起作用。

------设定LD_RUN_PATH环境变量------
将动态链接库路径假如此环境变量,类似LD_LIBRARY_PATH,不同的是,此搜索路径是在链接时起作用。

------配置修改 /etc/ld.so.conf 文件------
编辑配置文件/etc/ld.so.conf来指定动态库搜索路径,以下为实例内容:
include ld.so.conf.d/*.conf
/usr/ofed/lib
该文件中每行都是一个动态库搜索路径, 每次编辑完之后,都要手动执行ldconfig使修改后的配置生效。

另外:
注意到include ld.so.conf.d/*.conf,可以在/etc/ld.so.conf.d目录下添加一个新的文件filenameX.conf,
文件名后缀需为.conf,此文件内容即是指定的库搜索路径。

------编译时指定搜索路径------
编译目标代码时指定动态库的搜索路径,通过gcc的参数“-Wl,-rpath,”,指定多个路径时冒号:隔开
示例:gcc -o pos main.c L. -lpos -Wl,-rpath,./:/usr/local/lib

4.    动态库的搜索顺序

动态库搜索路径有缺省的,也可以有指定的,搜索加载顺序如下:
编译目标代码时指定的路径
环境变量LD_LIBRARY_PATH指定的路径
配置文件/etc/ld.so.conf指定的路径
缺省动态库搜索路径/lib
缺省动态库搜索路径/usr/lib


补充:

关于环境变量LD_LIBRARY_PATH,在IBM AIX系统上为LIBPATH,在HP-UX系统上为SHLIB_PATH。


参考:
http://www.kernel.org/doc/man-pages/online/pages/man8/ld.so.8.html
http://blog.csdn.net/ecjtuync/archive/2009/05/17/4195417.aspx
http://www.cnitblog.com/windone0109/archive/2008/04/23/42653.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值