zoukankan      html  css  js  c++  java
  • 动态库的创建与使用

    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

  • 相关阅读:
    [Redis]在.NET平台下的具体应用
    [Redis]在Windows下的下载及安装
    【重读MSDN之ADO.NET】ADO.NET连接
    贪心
    树状数组
    并查集
    模拟
    kruskal
    树链剖分
    匈牙利算法
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/10618307.html
Copyright © 2011-2022 走看看