问题描述
我正在尝试为 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