我有一个静态库,我们称之为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类引用转换为一个弱引用:通过asm(".weak_reference _OBJC_CLASS_$_MMRequest");
在.m文件中使用,这样的引用会变弱.
nm -m libSuperCool.a |grep MMReq (undefined) weak external _OBJC_CLASS_$_MMRequest
但是在这之后,我尝试构建一个链接libSuperCool的简单应用程序.我仍然在_OBJC_CLASS _ $ _ MMRequest上得到未定义的符号错误.
是否需要在链接时解析符号,如果是,为什么?我可以很容易地将我的变量声明为id
并得到我的最终结果,毕竟这是Objective-C.