【问题标题】:Xcode Mach-O Linker errors with 64-bit simulator64 位模拟器的 Xcode Mach-O 链接器错误
【发布时间】:2014-03-19 04:52:45
【问题描述】:

我一直在 Xcode 中开发 iOS 应用程序。它在常规模拟器中编译和运行完美,但是当我将模拟器设备切换到 64 位时,它失败了,出现 13 个新警告和 37 个新错误,所有这些都与(我认为)我正在使用的外部库相关联称为ObjectiveDDP(https://github.com/boundsj/ObjectiveDDP)。人们也有类似的问题,但我的理解是它们应该在最近发布的框架更新中得到修复,但在我看来,这个更新无济于事。我使用的第二个框架是SocketRocket (https://github.com/square/SocketRocket),但我认为这不是 Xcode 输出的罪魁祸首。

此外,很明显,许多人遇到此类 Mach-O 错误来自与 64 位不兼容的框架。但是,我觉得这是我的文件组织的问题。话虽如此,我也认为最重要的问题是: Ignoring file /path/to/project/ObjectiveDDP/libcrypto.a, missing required architecture x86_64 in file /path/to/project/ObjectiveDDP/libcrypto.a。有没有办法通过添加该架构来解决该文件中的这个问题?根据对类似问题的回答,我尝试将构建设置架构更改为Standard architectures(armv7, armv7s, arm64),并重新检查是否满足其他依赖项。

这是错误的一部分:

Undefined symbols for architecture x86_64:
  "_BN_CTX_free", referenced from:
      _srp_verifier_new in srp.o
      _srp_user_start_authentication in srp.o
      _meteor_user_generate_kgx in srp.o
      _meteor_user_generate_aux in srp.o
      _meteor_user_generate_S_string in srp.o
  "_BN_CTX_new", referenced from:
      _srp_verifier_new in srp.o
      _srp_user_start_authentication in srp.o
      _meteor_user_generate_kgx in srp.o
      _meteor_user_generate_aux in srp.o
      _meteor_user_generate_S_string in srp.o
      _srp_user_process_meteor_challenge in srp.o
  "_BN_add", referenced from:
      _srp_verifier_new in srp.o
      _meteor_user_generate_aux in srp.o
  "_BN_bin2bn", referenced from:
      _srp_verifier_new in srp.o
      _H_nn in srp.o
      _meteor_user_generate_u in srp.o
      _meteor_user_generate_x in srp.o
      _meteor_user_generate_k in srp.o
      _meteor_user_generate_M_string in srp.o
      _meteor_user_generate_HAMK in srp.o
      ...

以及 Xcode 中错误的截图:

经过我的研究,我仍然想知道这是否只是一个模拟器问题,并且在物理 iPhone 5S 上测试时它会自行解决,以及我如何才能摆脱这些错误?这里有什么暗示文件组织问题吗?另外两个警告是:

ld:警告:找不到选项的目录 '-L/path/to/place/projectname/projectname/ObjectiveDDP' ld:警告: 找不到选项的目录 '-L/path/to/place/projectname/SocketRocket/ObjectiveDDP'

这两个路径不存在,但我认为我通过删除文件夹、将它们移动到垃圾箱并重新添加它们来纠正它。

任何见解将不胜感激。

【问题讨论】:

    标签: xcode 64-bit x86-64 socketrocket


    【解决方案1】:

    您的 ObjectiveDPP 包中包含的 libcrypto.a 似乎不是为 64 位架构编译的。如果您需要 64 位,这个答案看起来可以帮助您获取该文件:

    Where I can find openssl iOS 7 libcrypto.a and libssl.a static library for arm64 architecture

    如果没有,您可以在不支持 64 位的情况下编译自己的应用程序。

    64 位刚刚添加到 Xcode 5.1 的默认设置中。您可以将自己项目中的架构设置为 $(ARCHS_STANDARD_32_BIT) 以将其删除并返回到 5.0 行为。

    【讨论】:

    • 成功了。我不需要 64 位支持,所以就像你建议的那样,我改变了架构。感谢您做出澄清;我想我的困惑是我认为我需要为 iPhone 5S 支持 64 位。干杯!
    猜你喜欢
    • 2013-12-03
    • 2012-12-31
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多