在Swift/Swift-C混合环境中链接存档Xcode 15中的未定义符号

3htmauhk  于 2024-01-05  发布在  Swift
关注(0)|答案(2)|浏览(160)

添加了Swift代码到J2EE-C项目。构建并为模拟器工作。存档未定义符号错误失败。
对编译文件的深入调查

  • C“*.o”文件需要符号:
  1. _OBJC_CLASS_$_AClass

字符串
但AClass.swift“AClass.o”文件只有(每纳米输出):

  1. 0000000000002318 D _OBJC_METACLASS_$_AClass


与模拟器编译相比,我看到AClass.swift编译成AClass.o:

  1. 0000000000002890 S _OBJC_CLASS_$_AClass
  2. 0000000000002398 D _OBJC_METACLASS_$_AClass


我不明白为什么存档不把“S OBJC_CLASS$_AClass”。
我已经做了什么:

  • 清除/删除并重新启动所有可能的;
  • 具有@objc属性的原因,
  • 重新添加Swift文件到Xcode(首先,这些文件被放置在那里很奇怪-不是在组中,一个文件显示在几个地方。但完全删除并重新添加,以便编译到模拟器);
  • 在构建配置中尝试了所有可能的拱门设置;
  • 比较了构建日志,试图找到一些特殊的标志来防止这一点(没有特殊的,只是-DDEBUG=1之类的)。由于编译和链接使用了不同的“sdk”文件夹。一个用于模拟器,一个用于iPhone设备;
  • 将所有ONLY_ACTIVE_VALVE设置为No。不起作用;
  • “默认情况下隐藏的符号”设置为“否”。

最终如何建立档案?

rbpvctlc

rbpvctlc1#

堆栈溢出类似的问题提示给了我一些更多的想法,其中一个工作)。.所有需要的只是增加iOS部署目标.从12.0到12.4在我的情况下工作.
Flutter Xcode 12 archive build fails with Undefined symbol: OBJC_CLASS$_STPAPIClient

de90aj5v

de90aj5v2#

当然!这里有一个简明的清单:
1.如果需要,确保Swift类使用@objc注解。
1.在正确的模块中检查Swift类成员。
1.验证Swift文件是否是归档目标的成员。
1.查看构建设置,尤其是Swift优化级别。
1.考虑在NSObject子类上使用@objcMembers
1.清理生成文件夹并重新生成。
1.确认匹配的部署目标。
1.检查归档构建的正确体系结构。
1.检查生成的Swift接口(-Swift.h文件)。
1.将Xcode更新到最新版本。

相关问题