• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

xcode - 如何仅在链接时有条件地使用静态库

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:26:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在做一个 iPhone 插件项目,我在其中构建了一个静态库,我们称之为 lib1.a,我提供给其他程序员。

当他们将 lib1.a 链接到他们的项目中时,他们也可能会链接 lib2.a,这是他们根据我给他们的头​​文件自己构建的。这个头文件只包含一个“钩子(Hook)”函数,它实例化一个 obj-c 对象。

这一切都很好,但我希望项目将 lib1.a 链接到 必须 链接 lib2.a。请记住,iOS 只支持静态库,我不想提供多个版本的 lib1.a。



Best Answer-推荐答案


谢谢,克里斯。我最终得到了类似的东西:可选的 lib2.a 包含一个工厂类,它创建一个对象,该对象实现了某个协议(protocol),该协议(protocol)公开了可选功能。这是标题:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@protocol OptionalStuffDelegate

// Delegate methods here

@end

@protocol OptionalStuff

// Methods here

@end

@interface OptionalStuffFactory : NSObject {}

+ (id<OptionalStuff>)instantiateWithDelegateid <OptionalStuffDelegate>)delegate baseViewUIView *)baseView;

@end

要在 lib1.a 中实例化,我这样做:

Class optionalStuffFactoryClass = NSClassFromString(@"OptionalStuffFactory");

if (optionalStuffFactoryClass != nil)
{
    optionalStuff = [optionalStuffFactoryClass performSelector: @selector(instantiateWithDelegate:baseView withObject: self withObject: glView];
}

lib2.a 实现了工厂类。没有对 OptionalStuffFactory 类的任何编译时引用这一事实确保了在 lib2.a 丢失的情况下没有 Unresolved 问题。

重要提示:您必须确保包含库的构建目标使用链接器标志 -ObjC,否则工厂类将被优化掉,因为没有对它的编译时引用。

关于xcode - 如何仅在链接时有条件地使用静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051453/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap