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