| (1)拷贝动态链接库到系统共享目录下,或在系统共享目录下为该动态链接库建立个连接(硬连接或符号连接均可,常用符号连接).这里说的系统共享目录,指的是LINUX动态链接库存放的目录,他包含/lib,/usr/lib连同/etc/ld.so.conf文档内所列的一系列目录. |
| # cp libmy.so /lib |
| # ldconfig |
| # |
| 或: |
| # ln -s `pwd`/libmy.so /lib |
| # ldconfig |
| # |
| (2)将动态链接库所在目录名追加到动态链接库配置文档/etc/ld.so.conf中. |
| # pwd >> /etc/ld.so.conf |
| # ldconfig |
| # |
| (3)利用动态链接库管理命令ldconfig,强制其搜索指定目录,并更新缓存文档,便于动态装入. |
| # ldconfig `pwd` |
| # |
| 需要说明的是,这种操作方法虽然有效,但效果是暂时的,供程式测试还能够,一旦再度运行ldconfig,则缓存文档内容可能改变,所需的动态链接库可能不被系统共享了.和之相比较,前两种方法是可靠的方法,值得业已定型的动态链接库共享时采用.前两种方法更有一个特点,即最后一条命令都是ldconfig,也即均需要更新一下缓存文档,以确保动态链接库的共享生效. |
| 四、含有动态函数的程式的编译 |
| 4.1 防止编译因未指定动态链接库而出错 |
| 当一个程式使用动态函数时,编译该程式时就必须指定含所用动态函数的动态链接库,否则编译将会出错退出.如本文示例程式ady.c的编译(未明确引用动态链接库libmy.so): |
| # cc -o ady ady.c |
| /tmp/ccL4FsJp.o: In function `main': |
| /tmp/ccL4FsJp.o(.text 0x43): undefined reference to `gettime' |
| collect2: ld returned 1 exit status |
| # |
| 注: 因为ady.c所含的动态函数getdate,gettime不在系统函数库中,所以连接时出错. |
| 4.2 编译时引用动态链接库的几种方式 |
| (1)当所用的动态链接库在系统目录(/lib,/usr/lib)下时,可用编译选项-l来引用.即: |
| # cc -lmy -o ady ady.c |
| # |




