我使用的开源渲染库(Ogre3D)依赖于zlib。
在XCode5中,我注意到在构建iOS时,如果ARCHS设置指示64位(arm64)架构,则不会构建zlib。
我收到与LSEEK
宏,read
和write
函数相关的“隐式函数声明”错误。我在gzlib.c中查找了LSEEK
:
#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
我的猜测是错误的,但我不知道是什么。至于read()
和write()
我没有任何线索。
答案 0 :(得分:11)
尝试在gzguts.h中添加#include <unistd.h>
。
答案 1 :(得分:1)
在这种情况下最简单的解决方案是不要自己构建 zlib ,因为它已经预先编译了iOS SDK(也适用于arm64)。
这个latest commit也在官方的Ogre依赖存储库中修复它。
除此之外,this Ogre3D thread还有另一个选项:
使用 ARCHS = ARCHS_STANDARD_INCLUDING_64_BIT ,像zlip这样的项目失败了。当我将其更改为 ARCHS_STANDARD_32_64_BIT 时,他们构建了OK。我发现前者评估为“armv7 armv7s arm64”,后者目前评估为“armv7 armv7s”。所以我认为zlip不会为arm64构建。
这意味着Ogre3D部分是针对64位编译的,其中一些依赖项如 zlib 保持32位。