【问题标题】:How to fix "is a dynamic library, not added to the static library" warning?如何修复“是动态库,未添加到静态库”警告?
【发布时间】:2014-03-22 02:16:08
【问题描述】:

我刚升级到Xcode 5.1,突然有新的警告:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: 文件: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/lib/libz.dylib 是动态库,没有添加到静态库中

产生此警告的目标是 cocos2d-iphone v2 静态库(而不是使用 cocos2d 模板,我创建了一个静态库)。为了创建静态库,我所做的只是将 cocos2d 项目添加到我的工作区,让我的项目链接到 cocos2d 链接到的库,仅此而已。在此更新之前,这一切都运行良好,但现在有一个警告。

我该如何解决这个问题?我不想乱搞cocos2d项目,因为有些项目我使用cocos2d模板而不是静态库。

【问题讨论】:

    标签: xcode cocos2d-iphone static-libraries cocos2d-iphone-2.x


    【解决方案1】:

    静态库目标不能链接到动态库。以前,这被简单地忽略了。您需要从静态库目标中删除所述 dylib,如有必要,将其添加到正在构建实际应用程序的每个目标中。

    查看带有库构建阶段的链接二进制文件。了解 cocos2d 后,您可能需要从 cocos2d 目标的构建设置中删除其他链接器标志“-lz”。

    【讨论】:

    • 您应该提到,静态库根本没有链接,.a 文件是目标文件的简单存档,只是为了方便而打包。
    • 是的,如果静态库目标 A 需要静态库目标 B,则 A 不需要链接它(构建 A 时会忽略它)。因此,如果应用程序目标未链接到静态库 A 和 B,则链接将失败,无论 B 是否列在目标 A 的“与库链接二进制”构建阶段。
    • 确实如此。对于许多人来说,这似乎是一个持续的困惑来源。
    • 我发现您的回答不清楚我到底需要做什么(因为我没有太多使用静态库的 xp)。如果我所做的有意义,也许您可​​以更新它以造福他人。我去了 cocos2d 的静态库目标的“Link Binary with Libraries”构建阶段,并删除了 libz.dylib。警告消失了。我没有修改任何链接器标志。
    • 我这样做了,但后来出现链接器错误。它对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 2017-07-07
    • 2023-03-19
    • 2014-09-21
    • 2013-05-28
    • 2016-03-26
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多