其他链接器标志-ObjC导致“找不到符号”错误

时间:2019-12-07 15:58:44

标签: ios objective-c xcode

我有一个纯粹的Objective-C项目,其结构如下:

  • 链接到App目标和Today扩展目标的自定义静态库,用于共享/重用代码
  • 静态库包含由CocoaPods安装的AFNetworking库(已禁用use_frameworks!)
  • 今天的iOS扩展包含由CocoaPods安装的Masonry库(已禁用use_frameworks!) enter image description here

在为今天扩展安装Masonry时,CocoaPods将-ObjC添加到我今天扩展目标中的Other Linker Flag中,这将在编译扩展目标时导致Undefined symbol错误。

enter image description here

但是,如果删除-ObjC标志,则项目将成功编译,我不知道这种情况如何发生。我已经在互联网上搜索了,唯一知道的是-ObjC标志将会

  

使链接器加载库中的每个目标文件   定义一个Objective-C类或类别

但是我不知道为什么这种行为会导致编译错误。

这是我为了重现此问题而创建的一个测试项目:https://github.com/JohnnyTseng/SimpleProject

该项目现在将导致“未定义符号”编译错误,但是如果删除

  • ${inherited}
  • -ObjC
SimpleTodayExtension中的

标志,它将正确编译

enter image description here

尽管该项目在删除-ObjC标志的情况下仍能正常编译,但我对幕后发生的事情感到非常好奇,如果有人可以教我如何发生该问题,谢谢!!

1 个答案:

答案 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,则一切正常,这是您实际观察到的。