我有一个纯粹的Objective-C项目,其结构如下:
AFNetworking
库(已禁用use_frameworks!)Masonry
库(已禁用use_frameworks!)
在为今天扩展安装Masonry
时,CocoaPods将-ObjC
添加到我今天扩展目标中的Other Linker Flag中,这将在编译扩展目标时导致Undefined symbol
错误。
但是,如果删除-ObjC
标志,则项目将成功编译,我不知道这种情况如何发生。我已经在互联网上搜索了,唯一知道的是-ObjC
标志将会
使链接器加载库中的每个目标文件 定义一个Objective-C类或类别
但是我不知道为什么这种行为会导致编译错误。
这是我为了重现此问题而创建的一个测试项目:https://github.com/JohnnyTseng/SimpleProject
该项目现在将导致“未定义符号”编译错误,但是如果删除
${inherited}
-ObjC
SimpleTodayExtension
中的标志,它将正确编译
尽管该项目在删除-ObjC
标志的情况下仍能正常编译,但我对幕后发生的事情感到非常好奇,如果有人可以教我如何发生该问题,谢谢!!
答案 0 :(得分:0)
来自clang
documentation
-ObjC Treat source input files as Objective-C inputs -ObjC++ Treat source input files as Objective-C++ inputs
这是显式命令,如果不存在,编译器通常通过文件扩展名隐式检测使用的语言。因此,如果按照惯例使用* .m,*。c,*。cpp,则一切正常,这是您实际观察到的。