【问题标题】:CommonCrypto isn't building for arch armv7 iOSCommonCrypto 不是为 arch armv7 iOS 构建的
【发布时间】:2012-09-22 21:07:26
【问题描述】:

我最近刚刚升级到新的 XCode。升级后,我的一些应用程序将无法构建。我收到此错误:

ld: cannot link directly with /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/system/libcommonCrypto.dylib.  Link against the umbrella framework 'System.framework' instead. for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经尝试了所有方法 - 清理、重新导入、更改架构...

请帮忙

【问题讨论】:

  • 转到您的目标构建步骤,在“与库的链接”下,删除 libcommonCrypto.dylib。
  • 请注意,在按照 tc 所说的进行操作时,不要将其移至垃圾箱。如果你这样做,你会得到“ld:在'/usr/lib/system/libcommonCrypto.dylib'中,缺少架构armv7文件/usr/lib/system/libcommonCrypto.dylib(2片)中所需的架构armv7”。只需将其从垃圾箱中放回即可。
  • @tc。为什么要删除 libCommonCrypto.dylib ?
  • 您应该接受一个答案,以便其他人更容易找到解决方案

标签: ios xcode armv7


【解决方案1】:

在我尝试了上述两种方法后,我以不同的方式解决了这个问题,但都不适合我。

问题是,当我从主界面(主要构建设置...等)添加库时,我最初搜索crypto,然后返回两个库libcorecrypto.dylibliblibcommonCrypto.dylib,如果您会注意到,与您通常添加的通常黄色的库不同,两者都以灰色存在。添加这些会导致编译器返回报告(缺少其他一些库,例如 libz,或者您执行的功能越多将需要的其他库。

如果您注意到上述两个库通常位于JavaScriptCore.framework 库(黄色的库)下,因此,通过删除上述两个并添加JavaScriptCore.framework,问题得到解决,build successful 显示

还要提一下,基于 JavaScriptCore.framework 内作为捆绑包存在的 gray-libs,libcrypto 和另一个 libcrypto 将不存在于上面提到的 /Library/.../system/path 下,即您没有从系统中删除它们,他们只是不在那里。

同样,解决方案是:

*在您的主要 XCODE 项目设置中,不要添加:*dd

libcorecrypto.dylib 
liblibcommonCrypto.dylib

改为添加:

JavaScriptCore.framework

在您的 .m(代码)中,只需通过以下方式正常获取它们:

#include <CommonCrypto/CommonDigest.h> (or any of your other libs as needed in code)...

它应该可以正常工作。

我希望这会有所帮助。

亲切的问候

【讨论】:

  • #import - 不是#include
【解决方案2】:

我刚刚解决了这个问题:

原来 libcommonCrypto.dylib 错误是一个红鲱鱼。

按照上面的建议删除 libcommonCrypto.dylib 后,我得到了 9 个新错误。 乍一看,我以为它们是加密错误,但实际上不是;对我来说,它实际上可以追溯到 zLib 没有被包括在内,它是在整体实现的更深部分中“导入”的(其中加密是其中的一部分)。

对我来说,它可以追溯到 ASIDataDecompressor.h,#import

我通过包含缺少的 libz.dylib 框架来修复它;最终,我不必明确包含 libcommonCrypto.dylib。

因此,请务必在切换 libcommonCrypto 后仔细检查错误,并确保没有丢失某些其他库。

【讨论】:

    【解决方案3】:

    我正在使用 cocoapods 进行图书馆管理。其中一个库(您可以在工作区中进行简单搜索)包含对 CommonCrypto.framework 的引用,该引用在其项目设置的框架列表中为红色。

    在我的情况下,我必须删除对 CommonCrypto.framework 的依赖,但此解决方案仅适用于您的 pod 的另一次更新。

    顺便说一句,我想知道一个命令来列出 Podfile 中库之间的依赖关系图。

    【讨论】:

      【解决方案4】:

      我有同样的错误,

      ld: in '/usr/lib/system/libcommonCrypto.dylib', missing required architecture arm64 in file /usr/lib/system/libcommonCrypto.dylib (2 slices) for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

      我通过检查我的 $PATH 解决了这个问题。 这是一个丢失的文件

      使用find / -type f -name libcommonCrypto.dylib

      比较我的库和我朋友的mac系统,它表明我的电脑上没有这个文件:

      /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/libcommonCrypto.dylib

      Xcode 在 /usr/lib/system/libcommonCrypto.dylib 上使用 $PATH 后备,但它不是很好的构建(i386 而不是 arm 的东西)。

      我复制了我朋友的版本,搬进/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/system/,然后我就可以再次构建我的项目了。

      这里有一个恶性问题,因为这个库有很多相同的文件,具体取决于您的架构,并且其中大多数不打算用于 ios 构建。但是当在专用目录上找不到文件时,$PATH env var 将回退到 /usr/lib。

      /usr/lib/system/libcommonCrypto.dylib 上的 Xcode 后备库,但这绝对不是正确的库,因为它不是为 ios 构建的,而是为我的 mac 构建的。

      【讨论】:

        【解决方案5】:

        Better Solution,正如它所说的删除 libcommonCrypto.dylib,并通过添加 SystemConfiguration.framework 替换。它对我有用,可能对某人有用。我收到链接器错误说 gettingLink 针对伞形框架“系统” .framework' 代替

        【讨论】:

          猜你喜欢
          • 2018-10-01
          • 2015-11-04
          • 2012-07-25
          • 1970-01-01
          • 1970-01-01
          • 2012-01-15
          • 1970-01-01
          • 1970-01-01
          • 2014-05-12
          相关资源
          最近更新 更多