如何为 iOS 和 macOS 编译 libffi?

How do I compile libffi for iOS & macOS?

我正在尝试在我的一个项目中使用 libffi,但我似乎无法针对 iOS(或 macOS,就此而言)进行编译。这是我在构建 iOS 模拟器时遇到的各种错误之一:

bash: src/arm/gentramp.sh: No such file or directory

更新 1: 由于问题仍未得到解答,我决定在官方存储库中也打开一个 issue

更新二:问题已得到解答,问题已关闭!

请确保您正在按照 TBD 或 git 项目发布的安装 libffi 说明进行操作:https://github.com/libffi/libffi

这里是一些主要亮点:

首先,您必须为您的特定配置配置分发 系统。 转到您希望在其中构建 libffi 的目录,然后 运行 "configure" 在 libffi 源码的根目录下找到的程序 分布.

如果您直接从版本控制构建 libffi,configure 不会 还存在; 运行 ./autogen.sh 先.

您可能想告诉配置在哪里安装 libffi 库和 头文件。为此,请使用 --prefix 配置开关。利比菲 默认情况下将安装在 /usr/local 下。

如果你想启用额外的 运行-time 调试检查,请使用 --enable-debug 配置开关。 这在程序死机时很有用 在使用 libffi 时神秘地。

另一个有用的配置开关是--enable-purify-safety。使用这个 将添加一些额外的代码,当您 正在使用带有 libffi 的 Purify。 仅在使用时使用此开关 净化,因为它会减慢库.

对于 iOS 构建,“libffi.xcodeproj”Xcode 项目可用。

Configure 还有许多其他选项。使用“configure --help”查看全部。

配置完成后,键入“make”。 请注意,您必须使用 GNU make. 你可以 ftp GNU make 来自 ftp.gnu.org:/pub/gnu/make .

为确保 libffi 像宣传的那样工作,输入“make check”。 这将需要您安装 DejaGNU

要安装库和头文件,请键入“make install”。

或者,尝试将以下 git 项目之一合并到您的项目中,以包含丢失的文件。 合并前请确保文件没有过期。

1 https://github.com/pandamonia/libffi-iOS

2 https://github.com/influitive/libffi-iOS

3 https://github.com/landonf/libffi-ios

如果您检查存储库,您将看到您需要的文件已在 this commit. You can find the last version of this file here 中删除。

generate-darwin-source-and-headers.py 和 libffi.xcodeproj 需要更新以包含所有当前相关的源文件。

不再需要 gentramp.sh 脚本,当前上游 xcodeproj 的编译设置和包含在 iOS 上的 64 位源文件都不是最新的。补丁叉可以在 https://github.com/ksjogo/libffi

找到
  1. sh autogen.sh

  2. python generate-darwin-source-and-headers.py --only-ios

  3. 打开libffi.xcodeproj

  4. select 方案 libffi-iOS 和设备 Generic iOS Device

  5. 单击“产品 - 构建”

    如果成功,你会在侧边栏中看到一个“Product/libffi.a”,你可以右键单击它来获取查找器中的库。