Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206785
  • 博文数量: 67
  • 博客积分: 1237
  • 博客等级: 中尉
  • 技术积分: 630
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-01 23:24
文章存档

2012年(8)

2011年(59)

分类:

2011-07-02 20:29:23

原文地址:linux 动态链接库 作者:fireworks2

By fireworks2@foxmail.com

找了大半天,都是些长篇大论,却也说不清楚的文章,自己简化了一下,列在下面了。


生成示例:g++ -fPIC -shared -g -o libtest.so lib.cpp

使用:

1. 编译可执行文件

    此时库的搜索目录为 -L 指定的路径,以及 g++ -print-search-dirs 打印的库搜索路径。

    把库放到默认搜索路径或者通过-L指定均可。


2. 运行可执行文件

    编译时的搜索目录和执行时的搜索目录是两回事,要知道编译通过后仍然可能无法执行。

    运行时查找相应的库,OS会依次查看以下路径

    (1) 用户环境变量中的LD_LIBRARY_PATH值;

    (2) 动态链接缓冲文件/etc/ld.so.cache

    (3) 目录/lib/usr/lib

    执行 ldd 就可以看到搜索到的结果。

    根据上面的搜索路径,将库或者库的软链接放到合适路径就可以了。

    不过如果编译时直接列出完整的so路径(如 g++ -o test ./libtest.so test.cpp),那也ok这是为什么呢?因为这么编译的话,共享库的路径信息已经写入了a.out,当然可以找到了


3. ldconfig

    该工具管理各个动态链接库的目录明细,对应的配置文件默认为 /etc/ld.so.conf。

    当用户在某个目录下面创建或拷贝了一个动态链接库,若想使其被系统共享,可以执行一下"ldconfig   目录名"这个命令。此命令的功能在于让ldconfig将指定目录下的动态链接库被系统共享起来,意即:在缓存文件 /etc/ld.so.cache中追加进指定目录下的共享库。不过下次更新cache可能被冲掉,导致找不到

    执行ldconfig可以刷新ld.so.cache文件。

阅读(937) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~