xcode - 如何仅在链接时有条件地使用静态库
<p><p>我正在做一个 iPhone 插件项目,我在其中构建了一个静态库,我们称之为 lib1.a,我提供给其他程序员。</p>
<p>当他们将 lib1.a 链接到他们的项目中时,他们也可能会链接 lib2.a,这是他们根据我给他们的头文件自己构建的。这个头文件只包含一个“钩子(Hook)”函数,它实例化一个 obj-c 对象。</p>
<p>这一切都很好,但我希望项目将 lib1.a 链接到 <em>必须</em> 链接 lib2.a。请记住,iOS 只支持静态库,我不想提供多个版本的 lib1.a。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>谢谢,克里斯。我最终得到了类似的东西:可选的 lib2.a 包含一个工厂类,它创建一个对象,该对象实现了某个协议(protocol),该协议(protocol)公开了可选功能。这是标题:</p>
<pre><code>#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol OptionalStuffDelegate
// Delegate methods here
@end
@protocol OptionalStuff
// Methods here
@end
@interface OptionalStuffFactory : NSObject {}
+ (id<OptionalStuff>)instantiateWithDelegate:(id <OptionalStuffDelegate>)delegate baseView:(UIView *)baseView;
@end
</code></pre>
<p>要在 lib1.a 中实例化,我这样做:</p>
<pre><code>Class optionalStuffFactoryClass = NSClassFromString(@"OptionalStuffFactory");
if (optionalStuffFactoryClass != nil)
{
optionalStuff = ;
}
</code></pre>
<p>lib2.a 实现了工厂类。没有对 OptionalStuffFactory 类的任何编译时引用这一事实确保了在 lib2.a 丢失的情况下没有 Unresolved 问题。</p>
<p>重要提示:您必须确保包含库的构建目标使用链接器标志 -ObjC,否则工厂类将被优化掉,因为没有对它的编译时引用。</p></p>
<p style="font-size: 20px;">关于xcode - 如何仅在链接时有条件地使用静态库,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/4051453/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/4051453/
</a>
</p>
页:
[1]