zoukankan      html  css  js  c++  java
  • linux环境下程序搜索动态库路径和加载相关操作

    前言:

    在linux下编译程序运行时,因为涉及到动态库加载搜索问题,老是会出现加载失败的现象出现,现在整理一下相关知识,供下次遇到问题查看。

    linux下程序寻找动态库路径:

    • 1.编译生成时,指定的搜索路径。

      在makefile中,一般使用”-Wl -rpath”来指明程序运行时到哪个路径去找库。当指定多个动态库搜索路径时,路径之间用冒号隔开,不能有空格。

    • 2.环境变量LD_LIBRARY_PATH中指定的路径。

           可以使用 echo LD_LIBRARY_PATH查看。一般初始时/lib和/user/lib库包含在里面。用户可以往里面添加。

    • 3./etc/ld.so.cache中缓存的路径。

           /etc/ld.so.conf的第一行有一个引用命令:include ld.so.conf.d/*.conf, 所以可以通过修改/etc/ls.so.conf这个配置文件来增删路径,也可以增加一个.conf文件来配置特有的动态库路径。直接将寻库路径加进来即可,保存后需要运行一下ldconfig重载一下。

    • 4.默认的/lib/和/usr/lib。

      这两个路径是系统最初就添加在LD_LIBRARY_PATH中,所以将库移动到这里亦可以寻找到。

    动态库相关命令:

    • 1.ld 查看gcc链接程序。
    • 2.ldd查看可执行程序中所依赖的库的程序,后面直接接可执行程序名即可查看该程序需要链接的库已经库路径,如果没找到的库会找不到的提示。
    • 3.ldconfig是用来更新/etc/ld.so.conf的修改生效。
    • 4.nm是用来查看.so库的函数名,标记是T的就是动态库里面生成的名字.

    Linux下动态库搜索路径顺序问题

    以下按优先级排序:

    • 1.编译目标代码时指定的动态库搜索路径;
    • 2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
    • 3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
    • 4.默认动态库搜索路径/lib;
    • 5.默认动态库搜索路径/usr/lib;

    动态库增添方法:

    1.在LD_LIBRARY_PATH中增加路径。

      export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX

      这种方式时临时有效,一旦登出就失效了。

    2.修改~./bashrc或~/.bash_profile或系统级别的/etc/profile

           export PATH=/wangqinghe/lib:$LD_LIBRARY_PATH

           source .bashrc (source命令通常用于重新执行刚修改的初始化文件,使之立刻生效,而不必注销并重新登录)。

    3.在/etc/ld.so.conf中增加路径,或者在/etc/文件目录下增加 *.conf文件去配置自己独有的寻库路径。修改之后要ldconfig一下。

    补充:

    ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.)

    说明:

    程序运行时不会把当前目录作为默认的寻库路径,除非你在编译时指定了。

    个人觉得在makefile时指定寻库路径比较好一些,因为它在程序员的控制之中,如果出了问题可以一一排除。

  • 相关阅读:
    计算机网络——浅析TCP粘包,拆包发生的原因以及解决方式
    计算机网络——谈谈HTTP中GET与POST的区别
    浅析Cookie、Session以及Token机制
    说说红黑树——不谈操作,只讲理解
    设计模式(1)——单例模式详解
    【转载】二叉排序树和平衡二叉树详解
    深入理解Java中方法重载的实现原理
    真win10官方原版ISO下载方法
    我的Windows装机必备软件与生产力工具
    Caffe源码理解3:Layer基类与template method设计模式
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/12084889.html
Copyright © 2011-2022 走看看