如何解决Objective-C中全局变量赋值时的‘undefined symbol’错误?
解决链接错误:undefined symbol: _ue
问题原因
你在global.h里用extern int ue;只是声明了变量,没有给它分配实际内存(也就是没定义)。extern关键字的作用是告诉编译器“这个变量在其他文件里已经定义过了”,但当你给ue赋值时,链接器需要找到变量的实体,找不到就会抛出这个错误。之前没赋值时,编译器可能只是引用声明,没触发链接器的实体查找,所以没报错。
解决方案
- 保持
global.h里的声明不变:extern int ue; - 在项目中任意一个
.m或.cpp文件(比如global.m、AppDelegate.m这类只会被编译一次的文件)里添加变量的定义:int ue; // 可以加初始值,比如int ue = 0;
注意事项
- 不要在头文件里直接写
int ue;(不加extern),否则每个引入该头文件的文件都会生成一个ue的副本,链接时会报重复定义错误。 - 确认定义变量的文件已经被加入到项目的编译列表中(Xcode中检查
Targets -> Build Phases -> Compile Sources里是否包含该文件)。
内容的提问来源于stack exchange,提问作者tombuarts
相关产品推荐
相关产品推荐

