#c #unix #makefile
#c #unix #makefile
Вопрос:
Мне нужно изменить внутреннее имя разделяемой библиотеки libcrypto.so.0.9.8 на libcrypto.so для определенной цели. Я не могу сделать это с помощью команды chatr, которая отображает только внутреннее имя.
Существует ограничение, из-за которого я не могу повторно скомпилировать разделяемую библиотеку с параметром h, указывающим внутреннее имя, что было моей первоначальной идеей.
Заранее спасибо.
Ответ №1:
Используйте переменную среды LD_PRELOAD. Это позволяет вам вставлять библиотеки.
По сути, вы настраиваете символическую ссылку в каталоге, которым вы управляете, с именем libcrypto.so.0.9.8, которая указывает на библиотеку, которую вы хотите использовать, (я полагаю): /lib/ libcrypto.so. Наведите LD_PRELOAD на символическую ссылку.
LD_PRELOAD не будет работать с программами setuid в HPUX.
Вы тщательно проверили, что все точки входа, которые вы используете в своем коде, находятся в libcrypto.so ?
Поскольку я понятия не имею, что происходит, это может быть не идеальным решением. Это лучшее предположение.
Комментарии:
1. Спасибо за ответ. Даже если у вас есть символическая ссылка, загрузчик фокусируется только на внутреннем имени. LD_PRELOAD — хороший вариант, хотя в данном случае это не сработало бы. В итоге я перекомпилировал OpenSSL, удалив параметр h в Makefile.shared для hpux.