2012-01-17 57 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