【发布时间】:2017-01-20 06:10:57
【问题描述】:
假设我有三个库:libMissingSymbol.so、libMiddle.so 和 libSymbolHaver.so。 libMissingSymbol 包含在 libSymbolHaver 中定义的符号,但仅依赖于 libMiddle。 libMiddle 应该依赖于 libSymbolHaver,但它没有。我没有组装这些库的源代码或未链接的目标文件。我是否可以将 libMiddle 与 libSymbolHaver 链接,以便 libMissingSymbol 可以在加载时找到它需要的符号?有什么方法可以只使用这三个共享对象文件和任何必要的工具来解决这个问题?我必须最终得到具有相同内容(包括 SONAME)的库,除非将依赖项更改为 libMiddle,以免在我的项目中进一步破坏。
假设的 readelf 输出(针对相关性进行了修剪)以澄清:
$ readelf -s libMissingSymbol.so
123: 00000000 0 OBJECT GLOBAL DEFAULT UND MangledSymbol
$ readelf -d libMissingSymbol.so
Dynamic section at offset 0x42434 contains 37 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libMiddle.so]
0x0000000e (SONAME) Library soname: [libMissingSymbol.so]
$ readelf -d libMiddle.so
Dynamic section at offset 0x75b28 contains 29 entries:
Tag Type Name/Value
0x0000000e (SONAME) Library soname: [libMiddle.so]
$ readelf -s libSymbolHaver.so
35: 00064d0c 4 OBJECT GLOBAL DEFAULT 22 MangledSymbol
【问题讨论】: