• linux的LD_LIBRARY_PATH和ldconfig功能分析


    LD_LIBRARY_PATH这个环境变量时程序在运行时寻找库文件的目录集合。有时候,我们可以不用LD_LIBRARY_PATH来帮我们寻找库文件,这个时候可以使用ldconfig这个命令。
    ldconfig命令需要/etc/ld.so.conf.d目录中的文件来配合使用,我们可以在这个目录中创建一个文本文件,里面写好第三方库文件的路径,然后运行ldconfig,这样程序在运行的时候,照样可以找到对应的第三方库。
    举例:
    caculate.c

    // cc -fPIC -shared caculate.c -o libcaculate.so
    int add(int a, int b)
    {
        return (a + b);
    }
    
    int sub(int a, int b)
    {
        return (a - b);
    }
    
    int mul(int a, int b)
    {
        return (a * b);
    }
    
    int div(int a, int b)
    {
        return (a / b);
    }

    用文件中提示的编译命令,可以在程序所在的目录编译出来一个动态库libcalcurate.so。
    然后我们写一个代码来使用这个动态库
    ldconfig_test.c

    // cc -g -o ldconfig_test ldconfig_test.c -L. -lcaculate
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main()
    {
        printf("add(1,3) = %d
    ", add(1, 3) );
    
        exit(EXIT_SUCCESS);
    }

    编译命令提示,在程序的链接阶段,要使用当前目录的libcalcurate.so

    当前连接的环境变量是
    [root@localhost dlopen]# echo $LD_LIBRARY_PATH
    /lib:/usr/lib

    自然,在运行的时候,程序是无法找到libcalcurate.so的
    [root@localhost dlopen]# ./ldconfig_test
    ./ldconfig_test: error while loading shared libraries: libcaculate.so: cannot open shared object file: No such file or directory
    [root@localhost dlopen]#

    这个时候,我们有两种选择来解决这个问题
    A)调整LD_LIBRARY_PATH的配置
    操作步骤
    1:修改$HOME/.bashrc,把当前目录加到LD_LIBRARY_PATH中,
    2:然后执行 source $HOME/.bashrc
    3:查看效果
    [root@localhost dlopen]# echo $LD_LIBRARY_PATH
    /lib:/usr/lib:./
    4:运行程序
    [root@localhost dlopen]# ./ldconfig_test
    add(1,3) = 4

    B)使用ldconfig
    1:把刚才的环境变量LD_LIBRARY_PATH的配置改回去
    2:将libcalcurate.so的路径加到 /etc/ld.so.conf.d 目录
    vi /etc/ld.so.conf.d/current_dir.conf
    ./
    3:运行 sudo ldconfig 将配置刷新
    4:运行程序
    [root@localhost dlopen]# ./ldconfig_test
    add(1,3) = 4

    其他说明
    如果有多个连接界面(终端),那么上述的操作,只会影响当前的终端,并不会影响已有的其他的连接终端。

  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/babyha/p/14761541.html
Copyright © 2020-2023  润新知