我有一个静态库,我们称之为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。