目录
  • 加载机制的问题
    • 1、在Windows上
    • 2、在Linux上
    • 3、解决问题
  • 总结

    加载机制的问题

    在Linux上,动态库的加载机制和在Windows上完全不一样

    其实应该叫做【共享库】才对,动态库是Windows的概念,Windows上为*.dll,Linux上为*.so。

    • dll:dynamic link library,即:动态链接库。
    • so:share object(library),即:共享库。

    1、在Windows上

    一个可执行程序会先在当前目录下找需要的动态库(*.dll)文件,如果当前目录下有,则加载。

    如果当前目录没有,才会去系统的环境变量目录下去找,如果找到了,则加载,如果连环境变量中都找不到,将报错。

    2、在Linux上

    一个可执行程序会直接去 “环境变量目录下” 找共享库(*.so),如果找不到,则报错。

    “环境变量目录下” 打了引号,因为这更像是一个专门用于【共享库】的环境变量,Linux的环境变量应该是PATH(可在终端输入这个查看:echo $PATH),PATH跟Windows上的环境变量又不一样,PATH描述的是Linux命令的一个路径,而Windows上的环境变量描述的是命令 + 库。

    Linux的库的加载,由 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf 来进行加载的,不妨一个一个打开看看就一切都明白了。

    3、解决问题

    (其实如果2中打开看了 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf就已经懂了,无论看没看,想直接解决问题,请看一下操作)

    ①将.so文件路径的目录添加到/etc/ld.so.conf

    sudo vim /etc/ld.so.conf

    方法1:在文件末行,添加自己的库的路径。

    方法2:将自己的库,复制到ld.so.conf文件中的其中一个路径下(如:/usr/lib 或 /usr/local/lib。推荐/usr/local/lib,能够避免受到Linux升级的影响)。

    ②让①中的修改生效

    sudo /sbin/ldconfig

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持本网站。

    您可能感兴趣的文章:

    • Linux下文件夹的移动与复制详解
    • 在Linux中重命名文件和目录的几种方法
    • 详解如何在Linux系统中更改文件和目录的权限
    • Linux实现将磁盘分区挂载到文件目录
    • Linux移动文件夹(目录)以及目录下的内容问题