Как я могу экспортировать все символы typeinfo для общей библиотеки без экспорта всех символов в GCC?

Вот проблема:

У меня есть общая библиотека, которая скрывает символы с помощью дефолт. Фактически, он использует параметр -Xlinker --version-script = для экспорта некоторых символов в конкретный файл, но скрывает все остальное. Проблема в том, что если мы попытаемся перехватить исключения, которые были определены в других разделяемых библиотеках, мы получим проблемы, потому что информация о типе скрыта этой разделяемой библиотекой. Я не могу явно сделать классы исключений видимыми, потому что они определены в библиотеке с открытым исходным кодом, которая находится вне моего контроля.Я также не хочу явно перечислять искаженные имена для typeinfo классов исключений в файле символов сценария версии, потому что над этой библиотекой работает много разработчиков, и они обязательно забудут сделать это для некоторого класса исключений в будущее.

Я пробовал использовать #pragma GCC visibility push (по умолчанию) перед открытыми исходными файлами .hpp, но, похоже, это не сработало - символы не были видны.

Я также пробовал использовать -fvisibility-ms-compat, который действительно экспортировал символы typeinfo, но также экспортировал тонны других символов, которые я не хотел экспортировать. В библиотеке есть код как на C, так и на C ++, поэтому я не уверен, как он должен работать с этой опцией, предназначенной только для C ++.

Что мне действительно нужно, так это опция, которая сделает все символы typeinfo видимыми, а другие символы оставит скрытыми (если они не видны явно). Есть такой вариант?

5
задан Will Brode 9 January 2012 в 17:31
поделиться