如何弱一个类从一个静态库导入另一个库(Objective-C)

时间:2014-01-31 19:55:40

标签: objective-c linker static-libraries

我有一个静态库,我们称之为libSuperCool.a。在其中我希望使用Millennial Media的SDK,libMMSDK.a。现在出于个人原因,我希望我的库不要吸收任何SDK的代码,我希望任何使用libSuperCool的应用程序都可以使用或不使用libMMSDK.a链接进行编译;因此,libSuperCool不会链接到libMMSDK。

默认情况下,libSuperCool内部对libMMSDK的任何引用都很强大,要求链接libMMSDK,否则无法成功链接可执行文件。例如,我的一个源文件创建了MMRequest *类型的变量。

nm -m libSuperCool.a |grep MMReq
    (undefined) external _OBJC_CLASS_$_MMRequest

我在网上发现了一篇非常有趣的帖子,解释了如何将一个ObjC类引用转换为一个弱引用:在.m文件中使用asm(".weak_reference _OBJC_CLASS_$_MMRequest");,这样的引用会变弱。

nm -m libSuperCool.a |grep MMReq
    (undefined) weak external _OBJC_CLASS_$_MMRequest

然而,在这样做之后,我尝试构建一个链接libSuperCool的简单应用程序。我仍然在_OBJC_CLASS _ $ _ MMRequest上得到未定义的符号错误。

是否需要在链接时解析符号,如果是,为什么?我可以很容易地将我的变量声明为id并得到我的最终结果,毕竟这是Objective-C。

0 个答案:

没有答案