菜鸟教程小白 发表于 2022-12-12 15:26:20

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 &lt;Foundation/Foundation.h&gt;
#import &lt;UIKit/UIKit.h&gt;

@protocol OptionalStuffDelegate

// Delegate methods here

@end

@protocol OptionalStuff

// Methods here

@end

@interface OptionalStuffFactory : NSObject {}

+ (id&lt;OptionalStuff&gt;)instantiateWithDelegate:(id &lt;OptionalStuffDelegate&gt;)delegate baseView:(UIView *)baseView;

@end
</code></pre>

<p>要在 lib1.a 中实例化,我这样做:</p>

<pre><code>Class optionalStuffFactoryClass = NSClassFromString(@&#34;OptionalStuffFactory&#34;);

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]
查看完整版本: xcode - 如何仅在链接时有条件地使用静态库