jko*_*shy 10
根据我的理解,每个可执行对象都有自己的"查找范围":
LD_PRELOAD
工具添加的共享对象将添加到主可执行文件后面的全局查找范围中.DF_SYMBOLIC
标志,则在该对象中生成的符号引用将在搜索全局查找范围之前查找该对象内的定义.dlopen()
可能有自己的依赖项.如果RTLD_GLOBAL
在调用期间未设置标志dlopen()
,则会将这些依赖项添加到该对象的查找范围,但不会影响全局查找范围.如果RTLD_GLOBAL
传递了标志dlopen()
,那么共享对象(及其依赖项)将被添加到"全局"查找范围,从而改变后续符号查找的行为.Ulrich Drepper的指南" 如何编写共享库 "建议阅读本主题.