将 ceres-solver 构建为 Mac Catalyst 的静态库

Build ceres-solver as static library for Mac Catalyst

我正尝试在最新的 Apple Sillicon M1 芯片上为我们的 iOS 应用程序添加测试。我们的应用程序对第​​三方库的依赖之一是 Ceres-Solver。我已经尝试了几天来为最新平台编译 ceres,但我所有的尝试都失败了。

所以我们使用 CMake 生成构建文件,然后我尝试使用 Xcode 和 xcodebuild 进行编译。构建成功,但每当我尝试将 link libceres.a 库添加到我们的应用程序时,我得到一个:

Building for Mac Catalyst, but the linked library 'libceresMacOS.a' was built for macOS. You may need to restrict the platforms for which this library should be linked in the target editor, or replace it with an XCFramework that supports both platforms.

我觉得这很奇怪,因为我在 Xcode 中构建并且我在编译 ceres 和我们的应用程序时针对相同的平台(“我的 Mac”)。我的怀疑之一是我在 CMake 命令中设置了一些错误的标志,这就是我 运行 它

cmake $fileDir/ceres-solver \
  -G"$GENERATOR_NAME" \
  -DCMAKE_BUILD_TYPE=Release \
  -DENABLE_BITCODE=OFF \
  -DENABLE_ARC=OFF \
  -DCMAKE_INSTALL_PREFIX=$fileDir/libs-macos \
  -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE \
  -DEIGENSPARSE=ON \
  -DEIGEN_INCLUDE_DIR_HINTS=$fileDir/eigen-git-mirror \
  -DEIGEN_INCLUDE_DIR=$fileDir/eigen-git-mirror \
  -DMINIGLOG=ON \
  -DCXX11_THREADS=ON \
  -DOPENMP=OFF \
  -DTBB=OFF

我已经尝试为新的 apple 目标添加标志: -DCMAKE_C_FLAGS="-target x86_64-apple-ios13.0-macabi" 但这没有任何效果,因为当我检查输出时,我看到用 -target arm64-apple-macos11.1 调用了 clang。 而且我在构建设置期间也遇到错误:

 building for macOS-arm64 but attempting to link with file built for unknown-x86_64
    Undefined symbols for architecture arm64:
      "_main", referenced from:
         implicit entry/start for main executable
    ld: symbol(s) not found for architecture arm64

我也试过 xcodebuild -project "Ceres.xcodeproj" -configuration "Release" -scheme "ceres" -destination "platform=macOS,variant=Mac Catalyst" 但这给了我一个错误

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
        { platform:macOS, variant:Mac Catalyst }

    Available destinations for the "ceres" scheme:
        { platform:macOS, arch:arm64, id:00008103-001419A0029A001E }

    Ineligible destinations for the "ceres" scheme:
        { platform:macOS, name:Any Mac }

所以我 运行 没有想法,如果有人能帮助我,我将不胜感激。 顺便提一下,我在 macOS Big Sur 11.1

上使用 Xcode 版本 12.4

非常感谢

经过更多研究后,我想出了如何进行这项工作,以防万一有人遇到同样的问题。 我最终阅读了这个问题描述 (link),让我觉得我应该尝试使用不同的代码生成器。 我的 cmake 配置是正确的,但显然使用 XCode 作为代码生成器存在错误(此处为 -G"$GENERATOR_NAME" )。在我设置 GENERATOR_NAME=Ninja 之后,我设法编译了一个用于 Mac Catalyst 的库版本。