如何修复“type_info的隐藏可见性。他们都应该有公众可见度。“?

问题描述 投票:2回答:1

在macOS系统控制台上,启动我的某个应用程序时会记录此错误:

APP [28193]:dynamic_cast错误2:以下一个或多个type_info具有隐藏的可见性。他们应该都有公众可见度。 17CPPNameOfClassA,28CPPNameOfClassB。

据我所知,它并没有影响功能(但是)显然出现了问题。在Clang源中检查此警告的来源也表明它会对性能产生影响。

这是为一个框架生成的,包括我的应用程序引用它的其他框架使用的C ++类。

FWIW,警告是由Clang(private_typeinfo.cpp)的https://github.com/llvm-mirror/libcxxabi/blob/master/src/private_typeinfo.cpp班引起的。

根据Apple的C ++运行时环境编程指南中的控制符号可见性章节,我应该能够使用属性或GCC编译指示来控制类级别的可见性。

事情就是这个符号已经可见,据我所知,nm和我的框架都已经有Default可见性(即NOT Hidden)。

同时使用(属性或编译指示)强制默认可见性会导致应用程序在之前仅创建警告的位置崩溃。

奇怪的是,此警告仅针对某些类生成,而同一编译单元/框架中的大多数其他类不会导致任何警告。

关于如何解决这个问题的任何进一步提示或想法非常感谢!

c++ xcode macos clang++ appkit
1个回答
0
投票

这是一个老问题,但也许这会帮助其他人遇到同样的问题。

这可能发生的原因之一是您的应用程序加载了同一个库的几个不同版本。例如,在我的情况下,我只是没有从库搜索路径中删除旧版本的路径。尝试查看(在调试器中)应用程序中加载了哪些库,并检查是否未从不同位置加载相同的库。

在尝试解决这个问题时,我发现这些链接非常有用:https://forums.wxwidgets.org/viewtopic.php?t=42566http://www.russellmcc.com/posts/2013-08-03-rtti.html

© www.soinside.com 2019 - 2024. All rights reserved.