c++ - 如何解决“type_info's has hidden visibility. they should all have public visibility.”?
问题描述
在 macOS 系统控制台上,启动我的一个应用程序时会记录此错误:
APP[28193]:dynamic_cast 错误 2:以下一个或多个 type_info 具有隐藏可见性。他们都应该有公众知名度。17CPPNameOfClassA,28CPPNameOfClassB。
据我所知,它不会影响功能(还),但显然出了点问题。在Clang源代码中检查此警告的来源也表明它会对性能产生影响。
这是为一个框架生成的,其中包括我的应用程序中引用它的其他框架使用的 C++ 类。
FWIW,警告是由Clangprivate_typeinfo.cpp
中的类引起的(https://github.com/llvm-mirror/libcxxabi/blob/master/src/private_typeinfo.cpp)。
根据Apple 的C++ Runtime Environment Programming Guide中的Controlling Symbol Visibility一章,我应该能够使用属性或 GCC pragma 控制类级别的可见性。
问题是符号已经可见,据我所知,nm
我的框架都已经Default
可见(即NOT Hidden
)。
同样使用(属性或编译指示)强制默认可见性会导致应用程序在它之前只创建警告的地方崩溃。
奇怪的是,此警告仅针对某些类生成,而同一编译单元/框架中的大多数其他类不会引起任何警告。
非常感谢有关如何解决此问题的任何进一步提示或想法!
解决方案
这是一个老问题,但也许这会帮助其他有同样问题的人。
发生这种情况的原因之一是您的应用程序加载了同一库的多个不同版本。例如,就我而言,我只是没有从库搜索路径中删除旧版本的路径。尝试查看(在调试器中)您的应用程序中加载了哪些库,并检查是否未从不同位置加载相同的库。
在尝试解决此问题时,我发现这些链接很有用:https ://forums.wxwidgets.org/viewtopic.php?t=42566 ,http://www.russellmcc.com/posts/2013-08-03-rtti。 .html _
推荐阅读
- java - android studio中的nullpoint
- python - 如何使用 Python 和 Chalice 库修改/替换 S3 图像?
- ruby-on-rails - 为什么我的应用程序在注册为新用户时返回 500
- css - 我如何将我创建的盒子中的所有内容居中?
- c# - 如何比较前一个选择中的一个值并创建二进制 1 或 0 字段
- javascript - 点击时暂停/播放视频不起作用javascript
- java - 如何创建类似于@autowire 和@value 的自定义注解
- asp.net-mvc - Sitecore 内容编辑器抛出:“/”应用程序错误中的服务器错误
- windows - WoW64 Egghunter 在 Windows 10 上的 Vulnserver 中找不到 shellcode
- angular - 如何使用 Spring Boot 后端部署 Angular 7 前端