动态库的创建与使用

1、动态库文件的创建

     (1)编写源文件

     (2)编译生成动态库

              g++  -fPIC  -shared  -o  libfile_operation.so  file_operation.cpp

              此编译过程分为两步,等同于下面的两个命令:

              g++  -c  -fPIC  file_operation.cpp  

              -fPIC是编译选项,PIC是Position  Independent  Code的缩写,表示要生成位置无关的代码,这是动态库的特性

              g++  -shared  -o  libfile_operation.so  file_operation.o

              -shared是链接选项,告诉g++生成动态库

 

2、编译链接动态库生成可执行文件

         g++  main.cpp  -L.  -lfile_operation

        -L指定搜索库的路径

        -l指定链接的库名称

   

 

       运行可执行文件

      上图可以看到,可执行文件执行时出错,原因是找不到动态库。

       Linux中,执行需要链接动态库的可执行文件时,是通过/etc/ld.so.cache文件搜索要链接的动态库的。而/etc/ld.so.cache是ldconfig程序读取/etc/ld.so.conf文件生成的(此文件中没有/lib和/usr/lib路径,ldconfig程序会默认搜索这两个路径)。

解决此问题有四种方法:

(1)将动态库所在路径添加到/etc/ld.so.conf中,然后以root权限执行以下ldconfig程序,这样就更新了/etc/ld.so.cache文件

(2)执行a.out时,通过LD_LIBRARY_PATH环境变量告诉a.out先在当前路径寻找链接的动态库,执行如下:

         LD_LIBRARY_PATH=. ./a.out

         或者先通过如下命令来添加动态库路径到环境变量,再直接执行./a.out

         export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test (这种设置环境变量的方式,当退出当前终端时就会失效)。

(3)将动态库放到默认搜索的路径中,/lib或者/usr/lib

(4)在生成可执行文件时就告诉它在指定的路径找动态链接库,通过-Wl, -rpath命令,例如:g++ main.cpp -L. -lfile_operation -Wl,-rpath=/home/test

posted @ 2019-03-28 22:40  落影无痕  阅读(1154)  评论(0编辑  收藏  举报