【发布时间】:2019-10-04 16:17:38
【问题描述】:
我正在处理的 Swift 项目具有以下结构
STATIC lib --- STATIC lib
| |
FRAMEWORKA FRAMEWORKB
\ /
App
框架 A 和 B 将第 3 方静态库与一些标头集成在一起,我在框架 A 和 B 中编写了自定义模块映射
另一方面,应用嵌入了FRAMEWORK A & B,自然会出现模块重定义错误
我有几种方法可以解决这个问题
1:通过弱链接(定义 .a)可选,而不是 FramworkB 项目中的必需(尽管我听说该功能不适合这种黑客攻击)
2:在框架 A 和 B 中以不同的方式命名 Objective-c 模块,这样它会欺骗链接器成功运行应用程序,但我在运行时在控制台日志中收到此消息
在 框架
module ACore {
header "ACoreConstants.h"
}
在框架B中
module Acorn {
header "ACoreConstants.h"
}
ACore 类在两者中都实现 /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA (0x108ad2908) 和 /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB (0x10881d908)。将使用两者之一。哪一个是未定义的。
有没有更好的、更清洁的方法来做这种事情?
【问题讨论】:
标签: ios objective-c swift linker frameworks