Как сделать задержку загрузки общей библиотеки в Linux
Я искал способ сделать общую библиотеку (давайте назовем библиотекуlibbar.so
) задержка загружена в Linux, и это, мы надеемся, должно быть реализовано с помощьютолько линкерне изменяя ничего в исходном коде, написанном на C ++; Я имею в виду, я не хочу ссылатьсяdlopen()
ниdlsym()
в исходном коде родительской библиотеки (назовем ееlibfoo.so
) чтобы вызвать функциюlibbar.so
потому что они делают исходный код грязным, а процесс обслуживания затруднительным. (Короче говоря, я ожидаю пойти по пути, аналогичному Visual Studio/DELAYLOAD
вариант даже на линуксе)
Во всяком случае, я нашел некоторые неопределенные информационные фрагменты, связанные с моим вопросом, в интернете, поэтому было бы очень приятно получить ответы от всех вас на следующие вопросы, чтобы прояснить информацию.
Есть лиGNU ld Поддержите ли какой-нибудь механизм загрузки с задержкой в Linux?Если это не так, как насчетлязг?Являетсяdlopen()
семья единственный способ задержать загрузку общей библиотеки в Linux?Я проверил, чтобы пройти-zlazy
флаг GCC (g ++) с путем к библиотеке, он, казалось, принял флаг, но поведение не выглядело какlibbar.so
задержка загружена (не имеяlibbar.so
Я ожидал исключения при первом вызовеlibbar.so
, но исключение фактически возникло до входа вlibfoo.so
). С другой стороны, Clang (clang++
) оставил предупреждение, что он проигнорировал флаг опции.
С уважением,