在 iOS 上为 Tensorflow Lite 构建静态框架

问题描述

我正在尝试为 iOS 交叉编译 Tensorflow Lite(2.5,每晚构建)。我想构建一个静态框架。这是我使用的构建命令:

bazel build --config=ios_arm64 -c opt //tensorflow/lite/ios:TensorFlowLiteC_framework

TensorFlowLiteC_framework 目标在 tensorflow/tensorflow/lite/ios/BUILD.apple 中定义为

tflite_ios_static_framework(
    name = "TensorFlowLiteC_framework",hdrs = [
        ":c_api.h",":common.h",":xnnpack_delegate.h","//tensorflow/lite/c:c_api_types.h",],allowlist_symbols_file = ":allowlist_TensorFlowLiteC.txt",bundle_name = "TensorFlowLiteC",minimum_os_version = TFL_MINIMUM_OS_VERSION,deps = [
        ":tensorflow_lite_c",)

我原以为生成的框架是一个静态框架,但它似乎是一个动态框架。在 TensorFlowLiteC.framework 文件夹中,有一个二进制文件 TensorFlowLiteC。如果我执行 file TensorFlowLiteC,我会得到:

TensorFlowLiteC: Mach-O universal binary with 1 architecture: [arm64:Mach-O 64-bit object arm64]
TensorFlowLiteC (for architecture arm64):   Mach-O 64-bit object arm64

这对我来说似乎是一个动态的 lib 文件。据我所知,如果这是一个静态档案,我应该得到:current ar archive

有没有办法真正将 Tensorflow Lite 构建成适用于 iOS 的实际静态框架?

解决方法

如果要使用静态框架,可以使用以下命令构建TensorFlowLiteC静态框架:

bazel build --config=ios_fat -c opt //tensorflow/lite/ios:TensorFlowLiteC_static_framework