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

and*_*guy 5 linker objective-c 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
Run Code Online (Sandbox Code Playgroud)

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

nm -m libSuperCool.a |grep MMReq
    (undefined) weak external _OBJC_CLASS_$_MMRequest
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*ick 2

来自glandium.org

添加-undefined dynamic_lookup到其他链接器标志。