0

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

此外,很明显,很多人都遇到过来自与 64 位不兼容的框架的此类 Mach-O 错误。但是,我觉得这是我的文件组织的问题。话虽如此,我也认为首要问题是: 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”的目录

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

任何见解将不胜感激。

4

1 回答 1

3

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

在哪里可以找到用于 arm64 架构的 openssl iOS 7 libcrypto.a 和 libssl.a 静态库

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

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

于 2014-03-19T08:14:53.210 回答