在两个从属框架中链接静态库时重新定义模块

问题描述 投票:0回答:1

我正在处理的Swift项目具有以下结构

   STATIC lib --- STATIC lib

        |            |

    FRAMEWORKA  FRAMEWORKB  

             \   /

              App

框架A和B在其中集成了带有某些标头的第三者静态库的地方,我已经在框架A和B中编写了自定义模块映射

另一方面,应用程序嵌入了FRAMEWORK A和B,自然会得到模块重新定义错误

我有几种方法可以解决此问题

1:通过弱链接(定义.a)可选,而不是FramworkB项目中的必需链接(尽管该功能并不适用于我所听到的这种hack)screenshot

2:在Framework A和B中以不同的方式命名Objective-C模块,这种方式会诱使链接程序成功运行应用程序,但在运行时会在控制台日志中收到此消息

在FRAMEWORKA

module ACore {
    header "ACoreConstants.h"
}

在FRAMEWORKB中

module Acorn {
    header "ACoreConstants.h"
}

ACore类在两个/ Users /用户/库/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA(0x108ad2908)和/ Users /用户/库/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB(0x10881d908)。将使用两者之一。哪一个未定义。

是否有更好的通常更清洁的方式来执行此类操作?

ios objective-c swift linker frameworks
1个回答
0
投票

因此,经过一番挣扎,我将体系结构演化为一个简单的体系

     STATIC lib
           |
   Wrapper Framework
    /            \
FRAMEWORKA  FRAMEWORKB  
         \   /
          App

通过这种方式,FRAMEWORKA&B通过外观与包装器框架进行对话,包装器框架不必泄漏有关包含的静态库的信息

© www.soinside.com 2019 - 2024. All rights reserved.