Как исправить "type_info имеет скрытую видимость. Все они должны иметь публичную видимость."?
В системной консоли macOS эта ошибка регистрируется при запуске одного из моих приложений:
APP [28193]: ошибка динамического вещания 2: один или несколько из следующих типов данных имеют скрытую видимость. Все они должны иметь публичную видимость. 17CPPNameOfClassA, 28CPPNameOfClassB.
Насколько я могу судить, это не влияет на функциональность (пока), но, очевидно, что-то не так. Изучение источника этого предупреждения в источниках Clang также показывает, что оно влияет на производительность.
Это генерируется для фреймворка, включающего классы C++, используемые другими фреймворками в моем приложении, ссылающемся на него.
FWIW, предупреждение вызвано private_typeinfo.cpp
класс в Clang ( https://github.com/llvm-mirror/libcxxabi/blob/master/src/private_typeinfo.cpp).
В соответствии с главой " Управление видимостью символов" в Руководстве по программированию среды выполнения C++ Apple, я должен иметь возможность управлять видимостью на уровне класса с помощью атрибутов или прагм GCC.
Насколько я могу судить, этот символ уже виден nm
и мои рамки все уже есть Default
видимость (т.е. НЕ Hidden
).
Также использование либо (атрибута, либо прагмы) для принудительного отображения по умолчанию приводит к сбою приложения, когда оно только создало предупреждение.
Как ни странно, это предупреждение генерируется только для некоторых классов, в то время как большинство других классов в том же модуле / структуре компиляции не вызывают никаких предупреждений.
Будем очень благодарны за любые дополнительные советы или идеи о том, как решить эту проблему!
1 ответ
Это старый вопрос, но, возможно, это поможет кому-то еще с той же проблемой.
Одной из причин этого может быть то, что ваше приложение загружает несколько разных версий одной и той же библиотеки. Например, в моем случае я просто не удалил путь к старой версии из пути поиска библиотеки. Попробуйте посмотреть (в отладчике), какие библиотеки загружены в ваше приложение, и убедитесь, что одна и та же библиотека не была загружена из разных мест.
Пытаясь решить эту проблему, я нашел эти ссылки полезными: https://forums.wxwidgets.org/viewtopic.php?t=42566, http://www.russellmcc.com/posts/2013-08-03-rtti.html.