OStack程序员社区-中国程序员成长平台

标题: xcode - 如何仅在链接时有条件地使用静态库 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:26
标题: xcode - 如何仅在链接时有条件地使用静态库

我正在做一个 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4