我一直在使用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:warning: 找不到选项的目录 '-L /路径/到/地点/项目名称/ SocketRocket / ObjectiveDDP'
并且这两条路径不存在,但我认为我通过删除文件夹,将它们移动到废纸篓并重新添加它来更正它。
非常感谢任何见解。
答案 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行为。