【发布时间】:2018-12-20 05:06:02
【问题描述】:
在 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 编译指示控制类级别的可见性。 p>
问题是符号已经可见,据我所知 nm 和我的框架都已经具有 Default 可见性(即不 Hidden)。
同时使用(属性或编译指示)强制默认可见性会导致应用在之前仅创建警告的地方崩溃。
奇怪的是,此警告仅针对某些类生成,而大多数其他类在同一编译单元/框架中不会引起任何警告。
非常感谢任何有关如何解决此问题的进一步提示或想法!
【问题讨论】:
-
我遇到了这个错误,它是由于试图对一个未初始化的变量进行 dynamic_cast 造成的,但碰巧持有指向来自不同类层次结构的对象的指针。
标签: c++ xcode macos clang++ appkit