Android ndk 构建C++;使用bazel使用android ndk工具链瞄准目标
我有一个带有tflite模型推断的.cpp代码。此源代码文件是bazel工作区的一部分。我想用默认桌面编译器和ndk的arm64自定义工具链构建它,然后在PC和手机上运行它,并比较结果。如何从ndk工具链(someandroidndkpath/toolschains/arm64/bin/clang)中指定自定义编译器 我的构建文件中有一个简单的目标:Android ndk 构建C++;使用bazel使用android ndk工具链瞄准目标,android-ndk,bazel,Android Ndk,Bazel,我有一个带有tflite模型推断的.cpp代码。此源代码文件是bazel工作区的一部分。我想用默认桌面编译器和ndk的arm64自定义工具链构建它,然后在PC和手机上运行它,并比较结果。如何从ndk工具链(someandroidndkpath/toolschains/arm64/bin/clang)中指定自定义编译器 我的构建文件中有一个简单的目标: cc_binary( name = "Evaluation", srcs = ["evaluation.cpp"], vi
cc_binary(
name = "Evaluation",
srcs = ["evaluation.cpp"],
visibility = ["//visibility:public"],
deps = [
"@org_tensorflow//tensorflow/lite:framework",
"@org_tensorflow//tensorflow/lite/kernels:builtin_ops",
],
)
编辑:
多亏了@ahumesky,它才起作用。我想澄清一下如何配置android\u ndk\u存储库规则
_ANDROID_NDK_HOME = "~/Android/Sdk/ndk/20.1.5948944/"
_ANDROID_SDK_HOME = "~/Android/Sdk/"
_ANDROID_NDK_API_VERSION = "29"
_ANDROID_SDK_API_VERSION = "29"
_ANDROID_BUILD_TOOLS_VERSION = "29.0.2"
load("//third_party/android:android_configure.bzl", "android_configure")
android_configure(name = "local_config_android")
load("@local_config_android//:android.bzl", "android_workspace")
android_workspace()
_ANDROID_NDK_HOME = "~/Android/Sdk/ndk/20.1.5948944/"
_ANDROID_SDK_HOME = "~/Android/Sdk/"
_ANDROID_NDK_API_VERSION = "29"
_ANDROID_SDK_API_VERSION = "29"
_ANDROID_BUILD_TOOLS_VERSION = "29.0.2"
load("//third_party/android:android_configure.bzl", "android_configure")
android_configure(name = "local_config_android")
load("@local_config_android//:android.bzl", "android_workspace")
android_workspace()
首先确保在
工作区
文件中设置了android ndk_存储库
规则(手动设置或通过TensorFlow的配置
脚本设置),然后尝试以下bazel标志:
--crosstool_top=//external:android/crosstool
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain
--cpu=arm64-v8a
使用Android crosstool,--cpu
可以是arm64-v8a
、armeabi-v7a
、x86
或x86\u 64
请注意,只有在构建cc\u二进制文件时才需要这些标志。如果您正在构建一个android\u二进制文件
,该android\u二进制文件
依赖项中的cc\u库
规则将自动使用android交叉工具