Вот проблема:
У меня есть общая библиотека, которая скрывает символы с помощью дефолт. Фактически, он использует параметр -Xlinker --version-script = для экспорта некоторых символов в конкретный файл, но скрывает все остальное. Проблема в том, что если мы попытаемся перехватить исключения, которые были определены в других разделяемых библиотеках, мы получим проблемы, потому что информация о типе скрыта этой разделяемой библиотекой. Я не могу явно сделать классы исключений видимыми, потому что они определены в библиотеке с открытым исходным кодом, которая находится вне моего контроля.Я также не хочу явно перечислять искаженные имена для typeinfo классов исключений в файле символов сценария версии, потому что над этой библиотекой работает много разработчиков, и они обязательно забудут сделать это для некоторого класса исключений в будущее.
Я пробовал использовать #pragma GCC visibility push (по умолчанию) перед открытыми исходными файлами .hpp, но, похоже, это не сработало - символы не были видны.
Я также пробовал использовать -fvisibility-ms-compat, который действительно экспортировал символы typeinfo, но также экспортировал тонны других символов, которые я не хотел экспортировать. В библиотеке есть код как на C, так и на C ++, поэтому я не уверен, как он должен работать с этой опцией, предназначенной только для C ++.
Что мне действительно нужно, так это опция, которая сделает все символы typeinfo видимыми, а другие символы оставит скрытыми (если они не видны явно). Есть такой вариант?