Я пытаюсь кросс-компилировать небольшой проект для Android через XLA.
Компиляция для ПК работает нормально, но для андроида я получаю ошибку компоновки:
error: undefined reference to '__multi3'
Я в настоящее время на TensorFlow коммит: 85827b2356d33e54d2e1413fc2005b08cde72f8 (четверг, 27 апреля, 17:51:34 2017)
Но я пробовал несколько других версий наряду с основными версиями 1.0.1 и 1.1.0.
В корне TensorFlow я меняю файл WORKFLOW и BUILD как таковой
android_ndk_repository(
name="androidndk",
path="/home/john/Android/android-ndk-r12b",
api_level=14)
load("//tensorflow/compiler/aot:tfcompile.bzl", "tf_library")
tf_library(
name = "mymodel",
cpp_class = "mynamespace::mymodel",
graph = "mymodel.pb",
config = "mymodel.config.pbtxt",
)cc_binary(
name = "myproject",
srcs = [
"myproject.cpp"],
deps = [
":mymodel",
"//third_party/eigen3",
],
linkopts = [
"-llog",
"-lm",
],
)
Мой минимальный проект
#include <iostream>
#define EIGEN_USE_THREADS
#define EIGEN_USE_CUSTOM_THREAD_POOL
#include <chrono>
#include <iostream>
#include "third_party/eigen3/unsupported/Eigen/CXX11/Tensor"#include "mymodel.h"
int main() {
Eigen::ThreadPool tp(2);
Eigen::ThreadPoolDevice device(&tp, tp.NumThreads());
mynamespace::mymodel instance;
instance.set_thread_pool(&device);
// Just testing
instance.Run();
}
Я строю с помощью следующей команды
bazel build :myproject \
--crosstool_top=//external:android/crosstool \
--cpu=armeabi-v7a \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--copt="-std=c++11" \
--copt="-mfpu=neon" \
--verbose_failures
ERROR: /home/john/build/tensorflow/BUILD:13:1: Linking of rule '//:myproject' failed: arm-linux-androideabi-gcc failed: error executing command
(cd /home/john/.cache/bazel/_bazel_john/32217266591f56f6caea7dc2786fea1b/execroot/tensorflow && \
exec env - \
PYTHON_BIN_PATH=/usr/bin/python3 \
TF_NEED_CUDA=0 \
TF_NEED_OPENCL=0 \
external/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -o bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/myproject bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/_objs/myproject/myproject.o bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/libmymodel.a -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/tf2xla/kernels/libgather_op_kernel_float_int32.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/tf2xla/kernels/libgather_op_kernel_float_int64.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/core/kernels/libgather_functor.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/tf2xla/kernels/libindex_ops_kernel_argmax_float_1d.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/tf2xla/kernels/libindex_ops_kernel_argmax_float_2d.lo -Wl,-no-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/aot/libruntime.a bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/xla/service/cpu/libruntime_conv2d.a bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/xla/service/cpu/libruntime_matmul.a bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/xla/service/cpu/libruntime_single_threaded_conv2d.a bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/xla/service/cpu/libruntime_single_threaded_matmul.a bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/tensorflow/compiler/xla/libexecutable_run_options.a external/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a external/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a -llog -lm -Wl,--export-dynamic -static-libgcc -no-canonical-prefixes '-march=armv7-a' -Wl,--fix-cortex-a8 '--sysroot=external/androidndk/ndk/platforms/android-14/arch-arm'): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-py3-opt/bin/mymodel.a(mymodel.o):__compute_module:function ____mymodel: error: undefined reference to '__multi3'
collect2: error: ld returned 1 exit status
Target //:myproject failed to build
INFO: Elapsed time: 1244.464s, Critical Path: 925.30s
Задача ещё не решена.
Других решений пока нет …