【发布时间】:2023-01-26 00:08:21
【问题描述】:
所以我最近将一个通用/胖框架转换为 XCFramework,我需要在应用程序中用新的 XCFramework 替换旧框架。
该应用程序具有以下链接器标志:
OTHER_LDFLAGS = -ObjC -force_load path/to/FrameworkName.framework/Versions/A/FrameworkName -lstdc++
迁移到 XCFramework,为了在 XCFramework 中使用正确的框架,我认为执行以下操作是有意义的:
OTHER_LDFLAGS[sdk=iphoneos*] = -ObjC -force_load path/to/FrameworkName.xcframework/ios-arm64/FrameworkName.framework/Versions/A/FrameworkName -lstdc++
OTHER_LDFLAGS[sdk=iphonesimulator*] = -ObjC -force_load path/to/FrameworkName.xcframework/ios-arm64_x86_64-simulator/FrameworkName.framework/Versions/A/FrameworkName -lstdc++
在构建时,Xcode 找不到 XCFramework 的标头,很可能是因为 FRAMEWORK_SEARCH_PATHS(我们过去一直使用)不适用于 XCFrameworks。因此,我还将 XCFramework 添加到“Link Binary With Libraries”构建阶段,以便让 Xcode 找到标头。
问题来了。 Xcode 现在告诉我有重复的符号,可能是因为我将 XCFramework 添加到“Link Binary With Libraries”构建阶段,并且还使用链接器标志强制加载了内部静态库。我必须做后者,以便链接静态库的全部内容,但我也必须做前者,否则 Xcode 找不到标题。
有没有办法(也许是另一个链接器标志)让 Xcode 链接器删除它找到的重复符号?或者作为替代方案,有没有一种方法可以让 Xcode 找到 XCFramework 标头,而不必将 XCFramework 添加到“Link Binary With Libraries”构建阶段?
我还应该补充一点,删除 -ObjC 链接器标志可以解决问题,但我不想冒险破坏其他正在链接的框架中的任何内容(因为该标志链接静态分析无法解析为直接调用的 Objective-C 代码) .如果需要,我愿意提供更多信息。
【问题讨论】:
标签: ios objective-c xcode clang xcframework