【发布时间】:2012-07-11 06:42:22
【问题描述】:
我正在尝试在 Ubuntu 12 Linux 上编译 Objective-C 代码。
main.m 看起来像这样:
#import <Foundation/Foundation.h>
#import "CEFoo/CEFoo.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog (@"hello world");
[pool drain];
return 0;
}
在 CEFoo.h 中,我有定义:
struct StructName{ // line 86
BOOL first;
...
...
};
@interface StructName :NSObject // line 92
BOOL first; // line 93
...
...
@end // 96
当我去编译时
gcc main.m `gnustep-config --objc-flags` -lgnustep-base -o main.bin
我收到这条消息:
Foo/CEFoo.h:93:1: error: redefinition of ‘struct StructName’
Foo/CEFoo.h:86:8: note: originally defined here
我已经读过这可能是由于重新定义结构两次,或者在使用包含而不是导入时递归导入引起的。
grep -r "struct StructName" *
只显示一次定义。
我还搜索了项目中的每个包含语句,并没有发现包含与导入的明显用途,或者 CEFoo.h 的双重包含/导入(包含正在定义/导入的结构的文件更多不止一次)。
我怎样才能进一步找出造成这种情况的原因?我假设我导入了两次——如果是,有没有办法通过第一次定义的详细或日志来观看它?
我能做些什么来解决这个问题?
TIA
【问题讨论】:
-
这将有助于查看更多的 CEFoo.h,尤其是第 93 行发生错误的地方。
-
另外,您可能希望将来在您的问题中添加“gnustep”标签,尽管在这种特定情况下,它可能不相关。
-
@Darren 我已经编辑了第 86-92 行的代码示例。 TIA
-
@andyvn22 会的,谢谢。
-
我刚刚在示例中添加了更多代码 -- 再次:)
标签: objective-c linux gnustep redefinition