为 Apple M1 和较旧的英特尔设备构建 FFTW

Build FFTW for Apple M1 and the older intel devices

我在我的 Apple m1 计算机上构建了 FFTW。当我运行lipo -info libfftw3.a(位于.libs/libfftw3.a)。上面写着是架构ARM64.

在我的 Xcode 中,为了向后兼容,我将构建目标设置为 10.11。

现在,当我将 FFTW 库添加到我的 Xcode 项目时,它会抱怨:

The linked library 'libfftw3.a' is missing one or more architectures required by this target: x86_64.

我该如何解决这个问题?我是否需要在 Intel 设备中构建库并创建一个包含这两个库的通用库(使用 lipo)或者解决此问题的正确方法是什么?

为了为 Intel 和 Apple 硅架构构建静态库,我需要分别为两个架构构建 FFTW,然后制作一个通用库。这是我的做法。

  1. 转到 FFTW 根文件夹

  2. 为英特尔架构构建

    ./configure --prefix=/path/to/build/folder/lib-intel CFLAGS="-arch x86_64 -mmacosx-version-min=10.11” 制作 安装

  3. 为 arm64 构建

    ./configure --prefix=/path/to/build/folder/lib-arm64 CFLAGS="-mmacosx-version-min=10.11" 制作 安装

  4. 进行通用构建

    lipo -create path/to/build/folder/lib-intel/libfftw3.a path/to/build/folder/lib-intel/libfftw3.a -output libfftw3_universal.a

  5. 在 Xcode 项目中包含 libfftw3_universal.a

您也可以使用此行对其进行配置,它将构建 x86_64 & arm64 二进制文件。

./configure CFLAGS="-arch arm64 -arch x86_64 -mmacosx-version-min=11.0"