1
1
基于我们对您的问题的讨论,我确信这与您的所有方法都是在类定义中定义的这一事实有关。这意味着gcc没有“key”功能,除了这个功能外,它还可以发出typeinfo对象的符号,也就是说,没有可以放置typeinfo对象的单个对象文件。因此,gcc所做的就是将typeinfo符号发送到每个需要它的对象文件中,并通知链接器在创建dylib时忽略重复项。 我询问可见性属性的原因是,即使其中一个重复的符号标记为“hidden”,链接器也会将typeinfo符号隐藏在dylib中,并且应用程序的任何其他部分在运行时都无法查找到它。您将不会得到一个编译时错误,它似乎适合您报告的行为。
如果您不确定是否使用可见性属性,那么您可能不使用,因为默认可见性是“默认”的,这基本上意味着不隐藏。寻找GCC的选项
我建议在cpp文件中移动至少一个成员定义的原因是为了强制执行typeinfo对象的单个发射,并测试这是否会产生影响。你没有说你是否试过这个,所以最好知道。 |