Я работаю над приложением обновления, которое должно быть в состоянии работать в существующей системе, а также запущено другим приложением в этой существующей системе.
Я использую общую библиотеку, которая сама использует OpenSSL, ноне связывался с этимРанее мое приложение обновлений связывалось с OpenSSL, чтобы обойти это.Но теперь я больше не могу ссылаться на OpenSSL из-за двоичной несовместимости.Теперь, когда мое приложение запускается в существующей системе, я получаю ошибку undefined symbol
, потому что OpenSSL не загружен.Обратите внимание, что у меня нет возможности загрузить его через LD_PRELOAD
, потому что я не могу изменить приложение, которое запускает мое приложение обновления.
Я думал о загрузке OpenSSL через dlopen
, надеясь, что общая библиотекабыть в состоянии использовать это.Но разделяемая библиотека использует OpenSSL в конструкторе C (__attribute__((constructor (101))) void myConstructor()
), и даже если я вызову dlopen
в другом конструкторе с более высоким приоритетом, динамический загрузчик уже, похоже, уже искал (и не смог) OpenSSL.Мой конструктор даже не выполняется.
LD_BIND_NOW
не установлен, поэтому мне интересно, почему ошибка undefined symbol
возникает до вызова моего конструктора.