Скажите, что у меня есть три библиотеки: 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
Спасибо за ваш ответ. Есть ли у вас какое-либо представление о целесообразности выполнения этого по-другому (например, декомпиляция libMiddle и перестройка его с правильными зависимостями)? –
@ThomasDeSilva Я обновил ответ. –
Re: point # 1, у меня было ограничение, потому что точка всего этого заключается в том, чтобы эмулировать другую среду исполнения, в которой у меня нет контроля (у меня есть более подробное сообщение на более конкретном форуме [здесь] (https: //www.chiefdelphi.com/forums/showthread.php?t=153697), если вы хотите узнать подробности). Однако ваша ревизия привела меня к рассмотрению моей ситуации, и я обнаружил настоящую проблему: перекос версии в моих библиотеках. Мне не пришлось пробовать свой подход, но я принимаю ваш ответ; Спасибо еще раз за помощь. –