如何修复“是动态库,未添加到静态库”警告?

7
我刚升级到Xcode 5.1,突然出现了一个新的警告:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file:/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模板而不是静态库。
1个回答

11

静态库目标不能链接到动态库。以前这个问题会被忽略,现在你需要从静态库目标中删除该动态库,并将其添加到构建实际应用程序的每个目标(如果必要)。

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


2
你应该提到静态库根本不会被链接,而 .a 文件只是一个简单的目标文件存档,只是为了方便打包而已。 - trojanfoe
1
如果一个静态库目标A需要另一个静态库目标B,那么在构建A时可以忽略B(A不需要链接它)。因此,无论B是否在目标A的“链接二进制文件库”构建阶段中列出,在应用程序目标不链接静态库A和B两者时,链接都会失败。 - CodeSmile
的确。这似乎是许多人持续感到困惑的问题。 - trojanfoe
1
我发现你的回答对我需要做什么不够清楚(因为我对静态库没有太多经验)。如果我所做的有道理,也许你可以更新一下以供他人受益。我进入了cocos2d静态库目标的“链接二进制文件库”构建阶段,并移除了libz.dylib。警告消失了。我没有修改任何链接器标志。 - Rahul Iyer
1
我做了这个,但是我得到了一个链接器错误。对我来说它没有起作用。 - Xander
@LearnCocos2D 系统框架怎么样?有什么区别,为什么没有警告? - entonio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接