参考文章:
Undefined symbols for architecture armv7
根据里面回答,可以总结出下面几个常见的原因:
1、新建文件或拷贝文件到你的工程中时,忘记或没有把文件加到正确的target中去。
如下图,我在添加UVTestUtil类时,把target勾选掉后,编译时会报如下错误。
解决方法:
打开工程,选择正确的target,选择build phases标签,打开Compile Sources选项,检查是否少了对应的文件。如果是,点击+号,将对应的文件加入即可。
2、在工程中导入了一个头文件,但是没有链接对应的库。这种错误常见于引入了如QuartzCore等系统库的头文件,但是没有在工程中加入对应的库。
解决方法:
1) 在设置的Build Phases标签下的Link Binary With Libraries模块添加对应的库。
2)如果你所使用的库在不在默认的搜索位置,你可以把相应的库的位置添加到LIbrary Search Paths里,并在Other Linker Flags模块添加标识,标识规则为 "-l{library_name_without_lib_and_suffix}",如要将libz.a加进去,则添加 “-lz” 标识。
3、你所使用的静态库不能适用对应的架构。如iOS中真机一般为arm64或arm7,模拟器一般为i386。如果没有支持对应的架构,则会报此错误。
解决方法:
需要提供支持相应架构的库。
总结
遇到类似问题时,先要去看一下报错的是那个类,那个方法,是静态库还是自定义库,再去对照三个原因进行排查和修改。