Xcode Mach-O链接器错误与64位模拟器

时间:2014-03-19 04:52:46

标签: xcode 64-bit x86-64 socketrocket

我一直在使用Xcode开发iOS应用程序。它在常规模拟器中编译和运行完美,但当我将模拟器设备切换到64位时,它失败了13个新警告和37个新错误,所有这些都与我正在使用的外部库相关联(我认为)名为ObjectiveDDPhttps://github.com/boundsj/ObjectiveDDP)。人们有类似的问题,但我的理解是他们应该在最近发布的框架更新中得到修复,但在我看来,这个更新无济于事。我正在使用的第二个框架是SocketRockethttps://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:warning:   找不到选项的目录   '-L /路径/到/地点/项目名称/ SocketRocket / ObjectiveDDP'

并且这两条路径不存在,但我认为我通过删除文件夹,将它们移动到废纸篓并重新添加它来更正它。

非常感谢任何见解。

1 个答案:

答案 0 :(得分:3)

看起来您的ObjectiveDPP包中包含的libcrypto.a未编译为64位arch。如果您需要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行为。