Tutaj jest problem:W GCC, jak mogę wyeksportować wszystkie symbole typeinfo dla biblioteki współużytkowanej bez eksportowania wszystkich symboli?
Mam wspólną bibliotekę, która domyślnie ukrywa symbole. W rzeczywistości używa opcji -Xlinker --version-script = do eksportowania niektórych symboli w określonym pliku, ale ukrywa całą resztę. Problem polega na tym, że jeśli spróbujemy wychwycić wyjątki zdefiniowane w innych bibliotekach współdzielonych, pojawią się problemy, ponieważ typinfo jest ukryte w tej bibliotece współdzielonej. Nie mogę jawnie uczynić klas wyjątków widocznymi, ponieważ są one zdefiniowane w bibliotece open source, która jest poza moją kontrolą. Nie chcę również jawnie wymieniać zniekształconych nazw dla informacji o klasach wyjątków w pliku symbolu skryptu wersji, ponieważ jest wielu programistów pracujących nad tą biblioteką i są oni zobowiązani zapomnieć o tym dla pewnej klasy wyjątków w przyszłość.
Próbowałem użyć push widoczności #pragma GCC (domyślnie) przed otwartymi plikami .hpp, ale nie działało - symbole nie były widoczne.
Próbowałem również użyć -fvisibility-ms-compat, która wyeksportowała symbole typeinfo, ale także wyeksportowała tony innych symboli, których nie chcę eksportować. Biblioteka zawiera zarówno kod C jak i C++, więc nie jestem pewien, jak ma działać z tą opcją, która dotyczy tylko C++.
To, czego naprawdę potrzebuję, to opcja, która uczyni wszystkie symbole typeinfo widocznymi, pozostawiając inne symbole ukryte (chyba że są wyraźnie widoczne). Czy istnieje taka opcja?
Być może dynamicznie generuj skrypt linkera, przetwarzając wynik nm' czy coś w tym stylu? Tylko zgadnij. –
To może być dobra droga. Myślałem o tym i chociaż nie podoba mi się dodatkowa praca skryptowa, mogłaby to być najlepsza odpowiedź. Dzięki za Twoją sugestię! –