【问题标题】:How to build zlib for arm64如何为 arm64 构建 zlib
【发布时间】:2014-04-09 05:44:16
【问题描述】:

我使用依赖于 zlib 的开源渲染库 (Ogre3D)。

在 XCode5 中,我注意到在为 iOS 构建时,如果 ARCHS 设置指示 64 位(arm64)架构,zlib 将不会构建。

我收到与 LSEEK 宏、readwrite 函数相关的“隐式函数声明”错误。我在 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() 我不知道。

【问题讨论】:

  • 我们正在使用官方的 zlib 库(截至昨天的版本为 1.2.8),但我们有一个修改过的 CMakeList.txt 文件,其中很多内容都被删除了。也许将我们的与官方 zlib 库中的进行比较,以检查是否有一些必须添加的东西才能在 arm64 上编译。
  • “我们”是指 Ogre3D,对吧?我没有意识到使用了自定义版本。
  • 是的,我所说的“我们”是指 Ogre3D(或者更具体地说,是我所属的 Ogre3D 开发团队)。应该更清楚,对不起。再说一遍:源码是正式版,只是CMakeList.txt不同。
  • 另外:您是否尝试手动定义_LARGEFILE64_SOURCE 并设置_LFS64_LARGEFILE-0 以检查使用lseek64 是否可以解决问题?

标签: ios xcode zlib ogre arm64


【解决方案1】:

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

【讨论】:

  • 解决了我的问题。谢谢。
  • 如果您在为 OpenCV3.1.0 编译 zlib 时遇到问题,也可以使用。谢谢。
【解决方案2】:

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

latest commit 也在官方 Ogre 依赖库中修复了它。

除此之外,this Ogre3D thread 还有这个选项:

使用 ARCHS = ARCHS_STANDARD_INCLUDING_64_BIT,像 zlip 这样的项目失败了。当我将其更改为 ARCHS_STANDARD_32_64_BIT 时,他们构建成功。我发现前者评估为“armv7 armv7s arm64”,而后者目前评估为“armv7 armv7s”。所以我认为 zlip 不会为 arm64 构建。

这意味着 Ogre3D 部件被编译为 64 位,而像 zlib 等一些依赖项则保持 32 位。

【讨论】:

  • 我认为这只是描述了同样的问题......它不适用于 arm64。虽然为 arm64 构建是一种选择,但 32 位应用程序会在 64 位 iOS 上引入额外开销,而且这似乎不是一个长期解决方案!
  • 我明白并同意。那就看看这个答案吧。也许添加 #include <unistd.h> 可以解决问题:stackoverflow.com/a/20143790/1947205
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2018-04-16
  • 2014-05-10
  • 2015-10-05
  • 2021-09-06
相关资源
最近更新 更多