Apple Mach O Linker警告

时间:2012-01-17 15:48:20

标签: objective-c xcode4 linker mach-o

我收到了这个恼人的警告

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

我已经在constant.h文件中声明了搜索标志,就像这样

BOOL searchFlag

我在过去的两天里对这个问题感到困惑,我已经尝试了谷歌的所有可能的解决方案,但似乎没有一个解决方案。

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

请帮我解决这个问题 感谢

2 个答案:

答案 0 :(得分:2)

我的猜测是你将这个头文件包含在多个源文件中。如此处粘贴,会产生多个名为_searchFlag的符号,每个符号都包含一个标题。

这里的常用模式,假设您正在尝试声明一个名为BOOL的{​​{1}}类型的全局变量,您可以从多个源文件中访问它,将在标题中声明它关键字searchFlag,然后在只有一个源文件中定义它。

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

extern

一个源文件(例如“Foo.m”):

extern BOOL searchFlag;

许多源/头文件:

BOOL searchFlag;

由于没有#import "Foo.h"; ,您在技术上会在包含/导入标题的每个源文件中重新声明它。

答案 1 :(得分: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]一样简单。