Linux动态链接库同名符号装载问题(二)

2022-08-07 20:10:37

  《Linux动态链接库同名符号装载题目(一)》中提到了动态链接的少少题目,本文要紧计划动态加载时符号冲突的题目。 PART1:RTLD_DEEPBIND掀开动态链接导致段舛错的征象 可践诺顺序A通过dlopen动态加载library.so,有也许显示library.so中和如许的处境: 顺序

  《Linux动态链接库同名符号装载题目(一)》中提到了动态链接的少少题目,本文要紧计划动态加载时符号冲突的题目。

  dlopen行使默认参数处境下,顺序A中的search_hash曾经加载到整体符号外,当library.so中某个函数思挪用search_hash时,实践会挪用到经过A中的search_hash函数。为了包管library.so不妨优先挪用到本身的函数,能够正在dlopen时行使RTLD_DEEPBIND参数,优先挪用.so内部的参数。

  据另一个BUG report中的阐明,是因为顺序启动时会初始化libstdc,可是当dlopen某个动态链接库,由于行使了RTLD_DEEPBIND参数,动态链接库内部挪用libstdc中的函数时会被定为到一个未初始化的实例,惹起段舛错。

  正在某些处境下.so之间也存正在依赖,比如还存正在另一个library2.so依赖于library.so中的少少函数,就请求正在dlopen掀开library.so时增加RTLD_GLOBAL参数,将library.so的符号外整体掀开。如许有也许变成顺序A和library.so中符号名冲突,因为这个冲突时正在运转时产生的,很阻挠易调试。这里供应一个能够正在运转前检讨的步骤: