У меня есть общий объект A.so, который статически ссылается на libssl.a & другой общий объект B.so, который также статически связывает libssl.a.Статическая библиотека загружена дважды
A.so & B.so имеет символы из libssl.a в GLOBAL scope. Я проверил это readelf -s A.so
У меня есть исполняемый файл a.out, который загружает A.so и B.so. Когда a.out завершено, я получаю двойную бесплатную ошибку в одном из символов libssl.a в A.so.
Несмотря на то, что libssl.a статически привязан к каждому общему объекту, поскольку они открыты глобально возможно, что один и тот же символ является общим, а не собирает его локальную копию.
Что такое обходной путь? Как сделать здесь символы здесь?
Помогите
Я бы рекомендовал использовать отладчик, чтобы подтвердить вашу теорию. – jdigital
Не могли бы вы разработать? – KodeWarrior
Небольшая вещь, потому что я понятия не имею, как применить ее к вашей ситуации: 'dlopen' имеет флаг RTLD_LOCAL, который в некоторых случаях поможет именно в этой ситуации. Поэтому, если вы открыли эти библиотеки с помощью 'dlopen', они, вероятно, не должны мешать. – liori