zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    python学习之计算机基础详解
    python学习笔记-day03
    名称空间与作用域
    函数参数的应用
    day14
    day13
    函数的基本使用
    day12
    day 09
    文件操作
  • 原文地址:https://www.cnblogs.com/rosekin/p/2349295.html
Copyright © 2011-2022 走看看