如何为arm64构建zlib

Mr.*_*Boy 6 xcode zlib ogre ios arm64

我使用一个开源渲染库(Ogre3D),它依赖于zlib.

在XCode5中,我注意到在构建iOS时,如果ARCHS设置指示64位(arm64)体系结构,则不会构建zlib.

我得到关于LSEEKreadwrite函数的"隐式函数声明"的错误.我抬头看了LSEEKgzlib.c:

#if defined(_WIN32) && !defined(__BORLANDC__)
#  define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
#  define LSEEK lseek64
#else
#  define LSEEK lseek
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

我的猜测是错误的,但我不知道是什么.至于read()write()我没有任何线索.

Mar*_*ler 11

尝试#include <unistd.h>在gzguts.h中添加.


Phi*_*ier 1

在这种情况下,最简单的解决方案是根本不自己构建zlib,因为它已经使用 iOS SDK(也适用于 arm64)进行了预编译。

这个最新的提交也在官方 Ogre 依赖项存储库中修复了它。

除此之外,这个 Ogre3D 线程还有另一个选项:

使用ARCHS = ARCHS_STANDARD_INCLUDING_64_BIT时,像 zlip 这样的项目会失败。当我将其更改为ARCHS_STANDARD_32_64_BIT时,它们构建正常。我发现前者的计算结果为“armv7 armv7s arm64”,而后者当前的计算结果为“armv7 armv7s”。所以我认为 zlip 不会为 arm64 构建。

这意味着 Ogre3D 部件是针对 64 位编译的,而某些依赖项(例如zlib)仍保持 32 位。