问题 Xcode -dynamic未指定静态库错误


我在Xcode中有一个子项目,它创建一个由父项目引用的静态库。一直都很好,直到iOS 7.1和Xcode 5.1发布,我突然收到以下警告。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: -dynamic not specified the following flags are invalid: -ObjC 
warning: /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/libsqlite3.0.dylib is a dynamic library, not added to the static library

有人知道我需要做些什么来修复这个警告吗?


10782
2018-03-11 09:04


起源

同样在这里。尝试添加-dynamic标志,导致更多的错误和警告。我希望有人能够深入了解问题的深度。因为将标志列表从编译器版本更改为另一个版本似乎太基础了。 - M. Porooshani
是的,我也试过了......同样的问题。将动态库标记为可选也无效。这被建议作为另一个论坛的解决方案。 - Sammio2


答案:


我认为解决方案在于动态和静态库的基本概念。对于库来说,动态库(在你的情况下是libsqlite3.0.dylib)是系统库,你不需要将它们添加到静态库中!你需要做的就是在你的决赛中添加他们的参考 目标 你想在(你的应用程序)中使用它们。

所以,简而言之:尝试删除引用 sqlite3.0.dylib 从您的静态库(我猜你在顶级应用程序中使用的另一个项目)并将其添加到您的应用程序(而不是静态库),你可能很高兴。 (解决了我的问题)

[编辑]: 请提交你的项目的git或做你做的任何事情来从你的项目做备份,有可能Xcode可能会在删除这些动态库后无理由地破坏你的项目而不是,删除项目的 派生数据 不会解决问题。


11
2018-03-11 11:57



我会试一试,但在我的情况下,构建我的静态库的项目需要自己编译,即使它不包含在另一个项目中。如果我从中删除动态sqlite库,这将打破。 - Sammio2
标记你的答案是正确的,因为它似乎确实是解决方案,我仍然认为这是苹果公司在.1版本中做出的一个奇怪的改变! - Sammio2
@ M.Porooshani您说“将它添加到您的应用程序(不是静态库” - 这是什么意思?在Xcode中特别添加库?“将它添加到您的应用程序中”非常模糊且无益。 - element119
@autibyte,很抱歉你没有得到它,但请再次阅读答案(尤其是括号)。并感谢您的投票! - M. Porooshani
@ M.Porooshani随时。只需仔细阅读它,仍然不清楚需要从“Link Binary with Libraries”中删除动态库并将其作为动态标志添加到根级应用程序。 - element119