GCC无效的常量字符串布局

时间:2015-05-20 21:37:15

标签: objective-c gcc

我尝试使用GCC的-fconstant-string-class选项在Linux上实现自己的字符串类。我班级的布局如下

@interface String : RootObject //my root object class; it is essentially NSObject
{ 
    char *c_string;
    unsigned int len;
}

这正是GCC tells me to implement thisisa ivar从RootObject类继承)的方式,但是当我尝试使用字符串文字(@"foo")时, GCC在编译时给出了以下错误

error: interface String does not have a valid constant string layout

Google搜索给了我this link,但好像提问者从未解决过他的问题。该类包含的唯一其他ivar是从超类继承的volatile int retainCount

1 个答案:

答案 0 :(得分:1)

retainCount ivar未包含在您引用的规范中。 GNU's Object class doesn't have it,并注意在Cocoa中,它来自与GNU的ObjC库相同的NeXTian,-retainCount is part of the NSObject protocol,而不是类。

这可能是您的问题,因为从您的根类继承它会将其放在c_stringlen字段之前,从而搞砸了预期的布局。

删除它应该允许它工作。