如何解决“ type_info具有隐藏的可见性。它们都应该具有公共可见性”?

时间:2018-07-12 05:05:06

标签: c++ xcode macos clang++ appkit

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

  

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

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

这是为包含我的应用程序中其他框架引用该框架的C ++类的框架生成的。

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

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

>

据我所知nm就是这个符号已经可见,并且我的框架都已经具有Default可见性(即 NOT Hidden

还使用(属性或编译指示)强制默认可见性会导致应用崩溃,因为该应用之前仅创建了警告。

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

对于解决此问题的任何进一步的提示或想法,深表感谢!

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,但这可能会帮助遇到相同问题的其他人。

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

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