2012-01-17 83 views
1

我得到这个恼人的警告苹果马赫Ø连接器警告

 
Apple Mach-O Linker Warning 
Alignment lost in merging tentative definition _searchFlag 

我已经宣布搜索标志在constant.h文件中像这样

 
BOOL searchFlag 

我从卡住了在这个问题上过去2天,我已经尝试了所有可能的解决方案,但谷歌似乎都没有工作。

我的应用程序同时支持armv6和v7 arch,为此我添加了设置,但这个dosent似乎是问题,它只是这个bool标志,从2天开始咬着我的脑袋。

请帮我在这 感谢

+0

显示更多代码请 – Geoffroy 2012-01-17 15:51:16

+0

@Geoffroy:我只是在constant.h文件中声明了这个标志,它不是一个代码就可以了。 – user1154230 2012-01-17 15:55:45

+0

它在那里没有分号。但是,如果这不是问题,那么它可能只是Xcode与你搞砸。尝试在.m文件中执行,并告诉我它是如何发生的。 – Telinir 2012-01-17 20:45:48

回答

1

标题中的全局变量在ObjC中不好juju;我并没有对全局的使用做出判断(因为它们确实有时是必需的),但我会去用不同的方式来声明它们。

我能想到的最简洁和最简单的方法(以及我的首选方法)是创建一个新类,将全局变量的访问器实现为类方法,并将变量本身声明为源文件中的静态变量。

myglobal.h 

@interface MyGlobal : Object 
{ 
} 

+ (BOOL)searchFlag; 
+ (void)setSearchFlag:(BOOL)aFlag; 

@end 


myglobal.m 

#import "myglobal.h" 

// Static variables 
static BOOL _searchFlag = NO; 

@implementation MyGlobal 

+ (BOOL)searchFlag 
{ 
    return _searchFlag; 
} 

+ (void)setSearchFlag:(BOOL)aFlag 
{ 
    _searchFlag = aFlag; 
} 

@end 

使用这种方法,接入全局是作为[MyGlobal searchFlag][MyGlobal setSearchFlag: YES]一样容易。

2

在这里,我的猜测是,要包括在多个源文件,这个头文件。在此处粘贴时,将会产生多个符号_searchFlag,每个符号包含一个标题。

这里的通常模式,假设你要声明一个名为searchFlagBOOL类型的全局变量,你可以从多个源文件访问,将其声明中利用关键字extern的头,然后把它定义在只有一个源文件。

头文件(称之为 “foo.h中”,例如):

extern BOOL searchFlag; 

一个源文件(也许 “Foo.m” 为例):

BOOL searchFlag; 

许多源/报头文件:

#import "Foo.h"; 

通过不具有extern你在技术上重新宣布它在每一个源文件中,你includ e /导入标题。

+0

我喜欢这个答案。我会补充一点,因为OP提到变量在常量文件中,所以该标志被定义为常量。 Foo.h:'extern const BOOL searchFlag;'和Foo.m:'const BOOL searchFlag = true;' – Aaron 2012-09-11 14:02:49