У меня есть общая библиотека libmain.so
, загруженная хост-программой с dlopen("libmain.so", RTLD_LOCAL)
, и при некоторых условиях libmain.so
загрузит другую общую библиотеку libpatch.so
, также с dlopen
.Проблема в том, что libpatch.so зависит от символов внутри libmain.so , так как я могу решить эту проблему?
Изменить RTLD_LOCAL
на RTLD_GLOBAL
невариант по причинам разрешения.
Там вопрос, очень похожий на этот, решение этой проблемы состоит в том, чтобы сделать libpatch.so
зависимостью libmain.so
, поэтому он будет загружен при загрузке libmain.so
, но мой libpatch.so
должен быть загружен условно, libpatch.so
может отсутствовать при подключении libmain.so
.
РЕДАКТИРОВАТЬ: исходная проблема, которую я хочу решить:
Когда процесс запущен, мы можем обнаружить, что есть ошибка в функции SomeFunction
внутри libmain.so
, , но процесс не может бытьперезапускается и libmain.so
не может быть перезагружен , поэтому мы должны предоставить libpatch.so
с исправленной ошибкой функцией SomeFunction
и отправить сигнал процессу, заставить его загрузить libpatch.so
и использовать SomeFunction
в libpatch.so
вместо глючного в libmain.so
.Однако SomeFunction
зависит от глобальной переменной GlobalVar
, и она могла измениться в libmain.so
, поэтому мы хотим связать SomeFunction
с ней внутри libmain.so
, но libmain.so
загружается с RTLD_LOCAL
,На GlobalVar
нельзя ссылаться, когда загружается libpatch.so
.