参考了不少资料,其中最靠谱是这个:http://www.mingw.org/wiki/librarypathhowto
和http://www.kaizou.org/2015/01/linux-libraries/
经过线上实际验证,GCC编译、链接、运行时库查找顺序如下,这个顺序真实可信,网上很多说法有些地方都是有些问题的,
导致遇到问题时总是不确定到底是哪里出了问题,花了不少时间,绝知此事要躬行。
略微让人头疼的是,没有找到官方文档清晰说明什么情况下该如何查找依赖库目录,链接时查找直接依赖库和间接依赖库的方式
差别挺大。。。
一、概括GCC链接时搜索直接依赖库的先后顺序:
1、LDFLAGS选项 -L 参数指定的路径。
2、系统环境变量 LIBRARY_PATH(某些系统或编译器下可能无效)。
3、gcc安装时自身配置的搜索路径,gcc --print-search-dir | grep libraries 可查看,
一般会包含该版本gcc必需的库而不一定包含当前系统库路径,链接时会以-L参数形式传递给ld。
4、ld安装时自身配置的搜索路径,ld -verbose | grep SEARCH_DIR 可查看,
gcc通过调用collect2工具调用ld。
To summarize, when linking an executable against a static library, you need to specify explicitly all dependencies towards shared libraries introduced by the static library on the link command.
二、概括GCC链接时搜索间接依赖库(直接依赖库的依赖库)的先后顺序:(即secondary dependencies)
特别说明:搜索直接依赖库的链接查找顺序同样适用于编译生成动态的( shared)、可重定位(relocatable)目标的情形。
-rpath-link=dir
When using ELF or SunOS, one shared library may require another. This happens when an "ld -shared" link includes a shared library as one of the input files.