• Linux动态库搜索路径


    Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。在Linux中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。


    例程 foo.c:

        #include<stdio.h>

        voidpos()
        {
           printf(“/projects/lib\n”);
        }

    • 编译:gcc -fPIC -c foo.c
    • 链接:gcc -shared -o libfoo.so foo.o

    例程 main_foo.c:

        #include<stdlib.h>

        voidfoo();

        intmain()
        {
           foo();
           return 0;
        }

    • 编译,链接 gcc -o main_foo main_foo.c -L. -lfoo

    运行: ./main_foo 出错:
    ./main_foo: error while loading shared libraries: libfoo.so: cannotopen shared object file: No such file or directory

    方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。

       可以通过编辑配置文件/etc/ld.so.conf来指定动态库的搜索路径,该文件中每行为一个动态库搜索路径。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。

    方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

       通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号”:”分隔。

    export LD_LIBRARY_PATH=/projects/lib

    方法三:在编译目标代码时指定该程序的动态库搜索路径。

       还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc的参数”-Wl,-rpath,”指定(如例3所示)。当指定多个动态库搜索路径时,路径之间用冒号”:”分隔。

    gcc -o main_foo main_foo.c -L. -lfoo-Wl,-rpath,/projects/lib    或者:

    gcc -o main_foo main_foo.c -L. -lfoo-Wl,-rpath-link,/projects/lib

    总结一下:Linux动态库的搜索路径搜索的先后顺序是:

    1.编译目标代码时指定的动态库搜索路径;

    2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

    3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

    4.默认的动态库搜索路径/lib;

    5.默认的动态库搜索路径/usr/lib。

  • 相关阅读:
    PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现
    PHP message:filesize(): stat failed for 错误
    laravel 数据验证规则
    Laravel修改验证提示信息为中文
    laravel 根据字段不同值做不同查询
    Laravel 报错: Dotenv values containing spaces must be surrounded by quotes.
    Laravel 自定命令以及生成文件
    什么是phpize及其用法
    在centos7下安装gitlab-runner
    php 23种设计模型
  • 原文地址:https://www.cnblogs.com/rosekin/p/2349295.html
Copyright © 2020-2023  润新知