linux 程序运行不能找到库文件

      为了增加代码的重用性和可维护性,操作系统一般都会引入库的概念,库分为静态库和动态库。

      静态库在编译的时候会静态编译到程序中,运行的时候不再依赖该库;

      动态库是将符号表编译到程序中,但是动态库中的程序本身没有被编译到程序中去,所以用户程序在运行的时候需要依赖动态库来完成正确的功能。

      linux找不到库文件根本原因是linux运行用户程序的时没有在指定的目录中寻找到.so动态库文件。

这个问题也有很多解决方法。

  1. 安装库到系统已有的库目录下:
    系统预设了一些库文件的寻找路径,比如 /lib/, /lib32/, /lib64/, lib/,lib32/,libx86_64-linux-gnu/。一般还会有 /usr/local/lib等目录。
    这种方式有全局查找的特点,缺点就是有的时候不好维护库的版本。也建议不要随便安装库到这些目录下,很多时候因为版本的原因容易影响到整个系统的稳定性。

  2. 添加程序运行的搜索路径:
    在程序运行前,先告诉编译器,如果找不到库,就在我给的路径下面找吧。
    1). 通过.bashrc 全局配置:

    gedit ~/.bashrc
    #------------ 在末尾添加 -------------
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的库目录
    #------------ --------- -------------
    source ~/.bashrc
    
    1. 终端配置
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/libs
    

    我推荐用终端配置这种方法,特别是程序在开发阶段,而且使用改方法也方便同类系统的移植,当要移植到同类计算机上时,不用再在其他计算机上搭建库环境了,直接将程序和库拷贝过去添加路径便可运行。

猜你喜欢

转载自blog.csdn.net/u012939880/article/details/95311259