平时我们使用.so动态链接库时,可能没有遇到问题。 是因为项目编译相关的设定已经弄好了,生成的.so库被安装到
系统目录(如/usr/lib/ 或者/lib/)目录下了;或者 是个人写的测试代码,so就在当前目录下。
如果使用make install将生成的可执行程序放到其他目录,执行程序时,会遇到动态链接库找不到的问题。
编译时所指定的动态库路径,只是用于编译过程。运行时,系统通过另外一个变量(LD_LIBRARY_PATH),
来表示动态链接库查找路径。
那么在默认到情况下,如何进行搜索呢?
动态库的搜索路径搜索的先后顺序是:
- 1 编译目标代码时指定的动态库搜索路径,LIBRARY_PATH【编译阶段】;
- 2 在运行时,环境变量LD_LIBRARY_PATH指定的动态库搜索路径【运行阶段】;
- 3 配置文件/etc/ld.so.conf中指定的动态库搜索路径【编译阶段】;
- 4 默认的动态库搜索路径/lib【编译阶段】;
- 5 默认的动态库搜索路径/usr/lib【编译阶段】
附上两个介绍更为详细的链接:
http://www.programgo.com/article/64203165348/
https://blog.youkuaiyun.com/gx19862005/article/details/48528235
关于Makefile的编写,推荐2个文章:
跟我一起写Makefile : https://seisman.github.io/how-to-write-makefile/overview.html
教你写Makefile: https://blog.youkuaiyun.com/alpha_love/article/details/62953847
另外,附上一篇介绍libtool(使用过automake的人,对这个一定不会陌生)的文章:
使用 GNU Libtool 创建库 : https://www.ibm.com/developerworks/cn/aix/library/1007_wuxh_libtool/