我收到了这个恼人的警告
Apple Mach-O Linker Warning Alignment lost in merging tentative definition _searchFlag
我已经在constant.h文件中声明了搜索标志,就像这样
BOOL searchFlag
我在过去的两天里对这个问题感到困惑,我已经尝试了谷歌的所有可能的解决方案,但似乎没有一个解决方案。
我的应用程序支持armv6和v7 arch我为其添加了设置但是这个剂量似乎是问题所在,它只是这个bool标志,从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]
一样简单。