Как предотвратить экспорт символов из статически связанной библиотеки?

Я создал общую библиотеку на Linux x86. Создавая его, я статически связал openssl. OpenSSL используется только для внутреннего использования, однако я вижу, что символы openssl были экспортированы. Это вызывает проблемы для других библиотек, которым нужна моя библиотека И openssl, потому что во время выполнения может быть загружен неправильный символ. Есть ли способ предотвратить экспорт всех символов openssl, когда я статически связываю их с моей общей библиотекой?

Спасибо Майк


person Mike Mole    schedule 07.04.2010    source источник


Ответы (1)


Предполагая, что вы используете gcc, при компоновке вашей библиотеки установите -fvisibility = hidden и в исходном коде библиотеки отметьте все функции, которые вы хотите видеть, как extern. Я думаю, это должно работать, пока openssl не объявил свои собственные функции extern.

Я думаю, что если openssl объявил некоторые символы extern, вы можете вручную принудительно скрыть символы с помощью прагм.

Есть и другие варианты. Ознакомьтесь с документацией gcc в разделе fvisibility, чтобы получить полное объяснение того, что вам доступно.

person frankc    schedule 07.04.2010
comment
Вы уверены, что это работает? У меня осталось впечатление, что видимость применяется только к символам в DSO (динамически разделяемые объекты). Неясно, связывает ли OP статический OpenSSL с динамической общей библиотекой, но я думаю, что в этом случае ваша стратегия сработает. Однако, если OP создает статическую библиотеку, я не думаю, что применимы атрибуты видимости. Хотя было бы неплохо открыть для себя другое! - person Chris Cleeland; 11.04.2011