【问题标题】:ios programming - overriding static library inside a static library at application levelios 编程 - 在应用程序级别覆盖静态库中的静态库
【发布时间】:2013-02-18 21:26:34
【问题描述】:

我对 ios 编程领域非常陌生,使用链接器对我来说只是一个全新的世界。我会尽力准确地回答我的问题。

上下文:使用 xcode 在 ios 项目中链接静态库。

问题:

问题成员: 3个静态库。

libTestLibA.a

libTestLibB.a

libTestLibB_mine.a -- 与 libTestLibB.a 相同的功能 -- 相同的类/方法。

问题描述

我正在使用 libTestLibA.a 制作应用程序。

libTestLibA 有一些类依赖于 libTestLibB 中的一些类。因此 libTestLibA.a 本身已编译 libTestLibB.a。

现在,我有自己的名为 libTestLibB_mine 的库。它具有与 libTestLibB 完全相同的功能。相同功能的相同方法/类。我希望 libTestLibA 使用 libTestLibB_mine 而不是 libTestLibB。我刚刚为每个问题成员编译了静态库 (.a),即 libTestLibA、libTestLibB 和 libTestLibB_mine。

问题

当我编译我的应用程序时,我是否可以强制静态编译库 (libTestLibA.a) 使用另一个库 (libTestLibB_mine.a) 而不是它已经包含的库 (libTestLibB.a)?如果是,如何?如果没有,是否有一些解决方法?

非常感谢。

【问题讨论】:

    标签: ios linker static-libraries


    【解决方案1】:

    如果 A 已经针对 B 进行了静态编译,那么我认为您不能将 B 替换为 B_mine。但作为一种解决方法,我认为您可能在这里寻找的是“Method Swizzling”。它的作用是在运行时用另一个方法替换一个类的方法(拦截消息并将其定向到其他地方)。

    以下链接应该对您有用。

    【讨论】:

    • 感谢您的回复。 Swizzling 会很困难,因为我不确定 B 的所有类/方法是 A 在内部使用的,因为我没有 A 的源代码。 B_mine 实际上只是 B 的不同版本,我希望我的应用程序通过强制 A 使用 B_mine 来使用它。我知道 libTestLibA 有 libTestLibB 的公共标头和 libTestLibB.a 链接。这意味着 B 在 A 中是静态编译的,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多