Objective-C错位名称(_OBJC_CLASS_ vs .objc_class_name_)

时间:2014-07-26 07:32:42

标签: objective-c static-linking name-mangling nm

我试图在链接库时修复一些未解析的引用,并注意到缺少的类被定义为

 U _OBJC_CLASS_$_CocoaRenderView

nm。 但是,如果我检查定义了这个类的库,我发现了这个:

00000000 t -[CocoaRenderView initCocoaRenderView:]
000000f0 t -[CocoaRenderView initCocoaRenderViewFullScreen:]
000000e0 t -[CocoaRenderView nsOpenGLContext]
00000000 A .objc_class_name_CocoaRenderView

以下是问题 - b / w前缀_OBJC_CLASS_.objc_class_name_的区别是什么?它似乎没有帮助链接器正确解析符号。

任何链接也会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我认为前缀为.objc_class_name_的符号是类名(字符串),类型为“绝对全局符号”(A),其中_OBJC_CLASS_符号的类型为“文本部分符号“(t)。

我没有研究过实施,但它们显然是不同的东西,我不确定这会对你有多大帮助,所以希望能够更接近金属的人能够进一步帮助你。

然而,在一天结束时,您似乎有足够的能力来验证该类是否未在目标文件中定义,并了解链接器正在抱怨什么,这就像我进行此类调查一样。 / p>