在两个依赖框架中链接静态库时的模块重新定义
Module redefinition while linking static libs in two dependent frameworks
Swift 我正在处理的项目具有以下结构
STATIC lib --- STATIC lib
| |
FRAMEWORKA FRAMEWORKB
\ /
App
框架 A 和 B 将第 3 方静态库与某些 headers 集成,我在框架 A 和 B 中编写了自定义模块映射
另一方面,App 嵌入了 FRAMEWORK A 和 B,自然会出现模块重定义错误
有几种方法可以解决这个问题
1:通过弱链接(定义 .a)是可选的,而不是 FramworkB 项目中的必需项(尽管我听说该功能并不适用于此类 hack)
2:在框架 A 和 B 中以不同的方式命名 objective-c 模块,这样它就成功地诱使链接器进入 运行 应用程序,但我在运行时在控制台日志中收到此消息
在
框架
module ACore {
header "ACoreConstants.h"
}
在 FRAMEWORKB 中
module Acorn {
header "ACoreConstants.h"
}
Class ACore is implemented in both
/Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA
(0x108ad2908) and
/Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB
(0x10881d908). One of the two will be used. Which one is undefined.
有没有更好更简洁的方法来做这类事情?
所以经过一番努力,我将架构演变成一个更简单的架构
STATIC lib
|
Wrapper Framework
/ \
FRAMEWORKA FRAMEWORKB
\ /
App
这样,FRAMEWORKA 和 B 通过外观与包装器框架对话,并且包装器框架永远不必泄漏有关包含静态库的信息
Swift 我正在处理的项目具有以下结构
STATIC lib --- STATIC lib
| |
FRAMEWORKA FRAMEWORKB
\ /
App
框架 A 和 B 将第 3 方静态库与某些 headers 集成,我在框架 A 和 B 中编写了自定义模块映射
另一方面,App 嵌入了 FRAMEWORK A 和 B,自然会出现模块重定义错误
有几种方法可以解决这个问题
1:通过弱链接(定义 .a)是可选的,而不是 FramworkB 项目中的必需项(尽管我听说该功能并不适用于此类 hack)
2:在框架 A 和 B 中以不同的方式命名 objective-c 模块,这样它就成功地诱使链接器进入 运行 应用程序,但我在运行时在控制台日志中收到此消息
在 框架
module ACore {
header "ACoreConstants.h"
}
在 FRAMEWORKB 中
module Acorn {
header "ACoreConstants.h"
}
Class ACore is implemented in both /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA (0x108ad2908) and /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB (0x10881d908). One of the two will be used. Which one is undefined.
有没有更好更简洁的方法来做这类事情?
所以经过一番努力,我将架构演变成一个更简单的架构
STATIC lib
|
Wrapper Framework
/ \
FRAMEWORKA FRAMEWORKB
\ /
App
这样,FRAMEWORKA 和 B 通过外观与包装器框架对话,并且包装器框架永远不必泄漏有关包含静态库的信息