为了增加代码的重用性和可维护性,操作系统一般都会引入库的概念,库分为静态库和动态库。
静态库在编译的时候会静态编译到程序中,运行的时候不再依赖该库;
动态库是将符号表编译到程序中,但是动态库中的程序本身没有被编译到程序中去,所以用户程序在运行的时候需要依赖动态库来完成正确的功能。
linux找不到库文件根本原因是linux运行用户程序的时没有在指定的目录中寻找到.so动态库文件。
这个问题也有很多解决方法。
-
安装库到系统已有的库目录下:
系统预设了一些库文件的寻找路径,比如 /lib/, /lib32/, /lib64/, lib/,lib32/,libx86_64-linux-gnu/。一般还会有 /usr/local/lib等目录。
这种方式有全局查找的特点,缺点就是有的时候不好维护库的版本。也建议不要随便安装库到这些目录下,很多时候因为版本的原因容易影响到整个系统的稳定性。 -
添加程序运行的搜索路径:
在程序运行前,先告诉编译器,如果找不到库,就在我给的路径下面找吧。
1). 通过.bashrc 全局配置:gedit ~/.bashrc #------------ 在末尾添加 ------------- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的库目录 #------------ --------- ------------- source ~/.bashrc
- 终端配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/libs
我推荐用终端配置这种方法,特别是程序在开发阶段,而且使用改方法也方便同类系统的移植,当要移植到同类计算机上时,不用再在其他计算机上搭建库环境了,直接将程序和库拷贝过去添加路径便可运行。