tensorflow / tensorflow

An Open Source Machine Learning Framework for Everyone
https://tensorflow.org
Apache License 2.0
186.02k stars 74.25k forks source link

Android C++ API on arm64-v8a #16795

Closed xav12358 closed 6 years ago

xav12358 commented 6 years ago

Hello,

I try to compile tensorflow for android arm64-v8a. I found lots of issues on similar problem but no answer work for me. Here is the full description of my commands:

Informations of my system:

ERROR: /home/xavier/Bureau/developpement/NeuralNetwork/tensorflow/tensorflow/core/kernels/BUILD:4276:1: C++ compilation of rule '//tensorflow/core/kernels:random_poisson_op' failed (Exit 1): clang failed: error executing command 
  (cd /home/xavier/.cache/bazel/_bazel_xavier/ef54af8645dec4f38c438d8e1c779747/execroot/org_tensorflow && \
  exec env - \
    LD_LIBRARY_PATH=/opt/ros/kinetic/lib:/usr/local/lib: \
    PATH=/opt/ros/kinetic/bin:/home/xavier/Android/Sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/ld:/home/xavier/bin:/home/xavier/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin:/home/xavier/Android/Sdk/platform-tools:/home/xavier/android-ndk-r14b:/home/xavier/Bureau/developpement/androidscreencast/bin:/home/xavier/Bureau/developpement/androidscreencast:/home/xavier/Bureau/developpement/gerrit_tools:/home/xavier/android-studio/bin:/home/xavier/Bureau/developpement:/home/xavier/dev/common.tools/bin:/home/xavier/dev/gcc-arm-none-eabi-6-2017-q2-update/bin:/home/xavier/dev/dump_Cyril:/home/xavier/opt/gnu-mcu-eclipse/openocd/0.10.0-3-20170826-1813-dev/bin \
    PWD=/proc/self/cwd \
    PYTHON_BIN_PATH=/usr/bin/python \
    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \
    TF_NEED_CUDA=0 \
    TF_NEED_OPENCL_SYCL=0 \
  external/androidndk/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -gcc-toolchain external/androidndk/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -target aarch64-none-linux-android -ffunction-sections -funwind-tables -fstack-protector-strong -fpic -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -no-canonical-prefixes -O2 -g -DNDEBUG -DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK '--std=c++11' -MD -MF bazel-out/arm64-v8a-opt/bin/tensorflow/core/kernels/_objs/random_poisson_op/tensorflow/core/kernels/random_poisson_op.d '-frandom-seed=bazel-out/arm64-v8a-opt/bin/tensorflow/core/kernels/_objs/random_poisson_op/tensorflow/core/kernels/random_poisson_op.o' -DEIGEN_MPL2_ONLY '-DS_IREAD=S_IRUSR' '-DS_IWRITE=S_IWUSR' '-DS_IEXEC=S_IXUSR' -DTF_USE_SNAPPY -iquote . -iquote bazel-out/arm64-v8a-opt/genfiles -iquote external/bazel_tools -iquote bazel-out/arm64-v8a-opt/genfiles/external/bazel_tools -iquote external/eigen_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/eigen_archive -iquote external/local_config_sycl -iquote bazel-out/arm64-v8a-opt/genfiles/external/local_config_sycl -iquote external/nsync -iquote bazel-out/arm64-v8a-opt/genfiles/external/nsync -iquote external/gif_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/gif_archive -iquote external/jpeg -iquote bazel-out/arm64-v8a-opt/genfiles/external/jpeg -iquote external/protobuf_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/protobuf_archive -iquote external/com_googlesource_code_re2 -iquote bazel-out/arm64-v8a-opt/genfiles/external/com_googlesource_code_re2 -iquote external/farmhash_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/farmhash_archive -iquote external/fft2d -iquote bazel-out/arm64-v8a-opt/genfiles/external/fft2d -iquote external/highwayhash -iquote bazel-out/arm64-v8a-opt/genfiles/external/highwayhash -iquote external/png_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/png_archive -iquote external/zlib_archive -iquote bazel-out/arm64-v8a-opt/genfiles/external/zlib_archive -isystem external/bazel_tools/tools/cpp/gcc3 -isystem external/eigen_archive -isystem bazel-out/arm64-v8a-opt/genfiles/external/eigen_archive -isystem external/nsync/public -isystem bazel-out/arm64-v8a-opt/genfiles/external/nsync/public -isystem external/gif_archive/lib -isystem bazel-out/arm64-v8a-opt/genfiles/external/gif_archive/lib -isystem external/protobuf_archive/src -isystem bazel-out/arm64-v8a-opt/genfiles/external/protobuf_archive/src -isystem external/farmhash_archive/src -isystem bazel-out/arm64-v8a-opt/genfiles/external/farmhash_archive/src -isystem external/png_archive -isystem bazel-out/arm64-v8a-opt/genfiles/external/png_archive -isystem external/zlib_archive -isystem bazel-out/arm64-v8a-opt/genfiles/external/zlib_archive -DEIGEN_AVOID_STL_ARRAY -Iexternal/gemmlowp -Wno-sign-compare -fno-exceptions '-ftemplate-depth=900' '-std=c++11' -DTF_LEAN_BINARY -Wno-narrowing -fomit-frame-pointer -O2 '--sysroot=external/androidndk/ndk/platforms/android-24/arch-arm64' -isystem external/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem external/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include -isystem external/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -c tensorflow/core/kernels/random_poisson_op.cc -o bazel-out/arm64-v8a-opt/bin/tensorflow/core/kernels/_objs/random_poisson_op/tensorflow/core/kernels/random_poisson_op.o)
In file included from tensorflow/core/kernels/random_poisson_op.cc:27:
In file included from ./tensorflow/core/framework/op_kernel.h:23:
In file included from ./tensorflow/core/framework/allocator.h:23:
In file included from ./tensorflow/core/framework/numeric_types.h:21:
In file included from ./third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:
In file included from external/eigen_archive/unsupported/Eigen/CXX11/Tensor:31:
In file included from external/eigen_archive/unsupported/Eigen/CXX11/../SpecialFunctions:46:
external/eigen_archive/unsupported/Eigen/CXX11/../src/SpecialFunctions/SpecialFunctionsImpl.h:108:5: error: static_assert failed "THIS_TYPE_IS_NOT_SUPPORTED"
    EIGEN_STATIC_ASSERT((internal::is_same<Scalar, Scalar>::value == false),
    ^                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
external/eigen_archive/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/StaticAssert.h:32:40: note: expanded from macro 'EIGEN_STATIC_ASSERT'
    #define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
                                       ^             ~
external/eigen_archive/unsupported/Eigen/CXX11/../src/SpecialFunctions/SpecialFunctionsImpl.h:1509:47: note: in instantiation of member function 'Eigen::internal::lgamma_impl<double>::run' requested here
  return EIGEN_MATHFUNC_IMPL(lgamma, Scalar)::run(x);
                                              ^
tensorflow/core/kernels/random_poisson_op.cc:234:58: note: in instantiation of function template specialization 'Eigen::numext::lgamma<double>' requested here
            CT t = -rate + k * log_rate - Eigen::numext::lgamma(k + 1);
                                                         ^
tensorflow/core/kernels/random_poisson_op.cc:308:5: note: in instantiation of member function 'tensorflow::functor::PoissonFunctor<Eigen::ThreadPoolDevice, float, float>::operator()' requested here
    functor::PoissonFunctor<CPUDevice, T, U>()(
    ^
tensorflow/core/kernels/random_poisson_op.cc:284:12: note: in instantiation of member function 'tensorflow::(anonymous namespace)::RandomPoissonOp<float, float>::Compute' requested here
  explicit RandomPoissonOp(OpKernelConstruction* context) : OpKernel(context) {
           ^
tensorflow/core/kernels/random_poisson_op.cc:328:15: note: in instantiation of member function 'tensorflow::(anonymous namespace)::RandomPoissonOp<float, float>::RandomPoissonOp' requested here
TF_CALL_float(REGISTER);
              ^
1 error generated.
Target //tensorflow:libtensorflow_cc.so failed to build
INFO: Elapsed time: 1712.148s, Critical Path: 61.59s
FAILED: Build did NOT complete successfully
tensorflowbutler commented 6 years ago

Thank you for your post. We noticed you have not filled out the following field in the issue template. Could you update them if they are relevant in your case, or leave them as N/A? Thanks. Have I written custom code Exact command to reproduce

xav12358 commented 6 years ago

I modify my first post. Is "libtensorflow_cc.so" well the project to build the C++ API of tensorflow on Android?

d4l3k commented 6 years ago

You likely want to be running

bazel build -c dbg --verbose_failures //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=armeabi-v7a
xav12358 commented 6 years ago

Hello d4l3k, So building libtensorflow_inference.so works properly in armeabi-v7a works. But the problem is I try to build tensorflow:libtensorflow_cc.so in arm64-v8a. To summurize:

tensorflow:libtensorflow_cc.so armeabi-v7: OK arm64-v8a: NOK libtensorflow_inference.so armeabi-v7: OK arm64-v8a: NOK

skye commented 6 years ago

@asimshankar do you own android builds?

xav12358 commented 6 years ago

What do you means by " own Android builds"? Why should I have Android builds whereas un armeabiv7 I sont need it. What is the difference between tensorflow_cc and tensorfllw_inference?

asimshankar commented 6 years ago

The //tensorflow:libtensorflow_cc.so bazel target includes dependencies that may not be Android friendly. As a general rule, not all build targets in the TensorFlow repository are compatible with Android and we will rely on the community to figure out how to build any target of interest if needed.

libtensorflow_inference.so is specifically designed to be a version of the TensorFlow runtime suitable for Android and that exposes the TensorFlow C API

It should be possible to build that for arm64-v8a. @petewarden may have more details.

xav12358 commented 6 years ago

Is there a cpp version of libtensorflow_inference ? Or what I had to to that to use it on cpp on Android? In that example: https://github.com/miyosuda/TensorFlowAndroidDemo/tree/master/jni-build/jni

it also use the libtensorflow_inference but also LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libandroid_tensorflow_lib.lo \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libandroid_tensorflow_kernels.lo \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libandroid_tensorflow_lib_lite.lo \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libprotos_all_cc.a \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libprotobuf.a \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libprotobuf_lite.a \ This files seems to be generate with libtensorflow_cc.

I would like to do the same un arm64-v8a but the there are errors.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

xav12358 commented 6 years ago

I still have no solution to build Tensorflow for Cpp on Android ...

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 15 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 59 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

yonderblue commented 6 years ago

I have a dockerfile builds tensorflow (not jni dependent) that uses the standalone ndk for arm64 with the changes needed to get all the way to the linking that I can share, but it fails due to gcc always choking on pthread, even though the -lpthread isn't being explicitly passed anywhere I can see, anyone know where it gets it? (initially I posted here about it https://github.com/snipsco/tensorflow-build/issues/24)

SUBCOMMAND: # //tensorflow:libtensorflow_framework.so [action 'Linking tensorflow/libtensorflow_framework.so']
(cd /root/.cache/bazel/_bazel_root/b46121d0546718834d76554a8a3bea26/execroot/org_tensorflow && \
  exec env - \
    PWD=/proc/self/cwd \
    PYTHON_BIN_PATH=/usr/bin/python \
    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \
    TF_NEED_CUDA=0 \
    TF_NEED_OPENCL_SYCL=0 \
  /android-arm/bin/aarch64-linux-android-gcc -shared -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so '-Wl,-rpath,$ORIGIN/' -Wl,-soname,libtensorflow_framework.so -pthread -Wl,-z,relro,-z,now -Wl,--gc-sections -v -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64 -Wl,@bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so-2.params)
ERROR: /tmp/tensorflow/arm/tensorflow/BUILD:744:1: Linking of rule '//tensorflow:libtensorflow_framework.so' failed (Exit 1): aarch64-linux-android-gcc failed: error executing command 
  (cd /root/.cache/bazel/_bazel_root/b46121d0546718834d76554a8a3bea26/execroot/org_tensorflow && \
  exec env - \
    PWD=/proc/self/cwd \
    PYTHON_BIN_PATH=/usr/bin/python \
    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \
    TF_NEED_CUDA=0 \
    TF_NEED_OPENCL_SYCL=0 \
  /android-arm/bin/aarch64-linux-android-gcc -shared -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so '-Wl,-rpath,$ORIGIN/' -Wl,-soname,libtensorflow_framework.so -pthread -Wl,-z,relro,-z,now -Wl,--gc-sections -v -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64 -Wl,@bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so-2.params)
Using built-in specs.
COLLECT_GCC=/android-arm/bin/aarch64-linux-android-gcc
COLLECT_LTO_WRAPPER=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/lto-wrapper
Target: aarch64-linux-android
Configured with: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/configure --prefix=/tmp/ec4cb553ef61611c1d388a938c56382a --target=aarch64-linux-android --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/buildbot/tmp/build/toolchain/temp-install --with-mpfr=/buildbot/tmp/build/toolchain/temp-install --with-mpc=/buildbot/tmp/build/toolchain/temp-install --with-cloog=/buildbot/tmp/build/toolchain/temp-install --with-isl=/buildbot/tmp/build/toolchain/temp-install --with-ppl=/buildbot/tmp/build/toolchain/temp-install --disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check --enable-cloog-backend=isl --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --enable-bionic-libs --enable-libatomic-ifuncs=no --enable-initfini-array --disable-nls --prefix=/tmp/ec4cb553ef61611c1d388a938c56382a --with-sysroot=/tmp/ec4cb553ef61611c1d388a938c56382a/sysroot --with-binutils-version=2.27 --with-mpfr-version=3.1.1 --with-mpc-version=1.0.1 --with-gmp-version=5.0.5 --with-gcc-version=4.9 --with-gdb-version=none --with-gxx-include-dir=/tmp/ec4cb553ef61611c1d388a938c56382a/include/c++/4.9.x --with-bugurl=http://source.android.com/source/report-bugs.html --enable-languages=c,c++ --disable-bootstrap --enable-plugins --enable-libgomp --enable-gnu-indirect-function --disable-libsanitizer --enable-gold --enable-ld=default --enable-threads --enable-eh-frame-hdr-for-static --enable-fix-cortex-a53-835769 --enable-graphite=yes --with-isl-version=0.11.1 --with-cloog-version=0.18.0 --program-transform-name='s&^&aarch64-linux-android-&' --enable-gold
Thread model: posix
gcc version 4.9.x 20150123 (prerelease) (GCC) 
COMPILER_PATH=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/:/android-arm/bin/../libexec/gcc/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/
LIBRARY_PATH=/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/:/android-arm/bin/../lib/gcc/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/../lib64/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/:/android-arm/bin/../sysroot/usr/lib/
COLLECT_GCC_OPTIONS='-shared' '-o' 'bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so' '-pthread' '-v' '-L/android-arm/sysroot/usr/lib' '-L/android-arm/lib' '-L/android-arm/lib64' '-L/android-arm/aarch64-linux-android/lib' '-L/android-arm/aarch64-linux-android/lib64' '-mlittle-endian' '-mabi=lp64'
 /android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/collect2 -plugin /android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/liblto_plugin.so -plugin-opt=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/lto-wrapper -plugin-opt=-fresolution=/tmp/ccklAaJ3.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-ldl -plugin-opt=-pass-through=-lgcc --sysroot=/android-arm/bin/../sysroot --eh-frame-hdr -shared -dynamic-linker /system/bin/linker64 -X -EL -maarch64linux --fix-cortex-a53-835769 --fix-cortex-a53-843419 -z noexecstack -z relro -z now -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so /android-arm/bin/../sysroot/usr/lib/crtbegin_so.o -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64 -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x -L/android-arm/bin/../lib/gcc -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/../lib64 -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib -L/android-arm/bin/../sysroot/usr/lib -rpath $ORIGIN/ -soname libtensorflow_framework.so -z relro -z now --gc-sections @bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so-2.params -lgcc -lc -ldl -lgcc /android-arm/bin/../sysroot/usr/lib/crtend_so.o
/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: cannot find -lpthread
/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: cannot find -lpthread
collect2: error: ld returned 1 exit status
Target //tensorflow:libtensorflow.so failed to build
INFO: Elapsed time: 123.493s, Critical Path: 15.35s
yonderblue commented 6 years ago

Turning off supports_param_files I get

SUBCOMMAND: # //tensorflow:libtensorflow_framework.so [action 'Linking tensorflow/libtensorflow_framework.so']
(cd /root/.cache/bazel/_bazel_root/b46121d0546718834d76554a8a3bea26/execroot/org_tensorflow && \
  exec env - \
    PWD=/proc/self/cwd \
    PYTHON_BIN_PATH=/usr/bin/python \
    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \
    TF_NEED_CUDA=0 \
    TF_NEED_OPENCL_SYCL=0 \
  /android-arm/bin/aarch64-linux-android-gcc -shared -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libframework_internal_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libversion_lib.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_internal_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_hash_crc32c_accelerate_internal.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_proto_parsing.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/snappy/libsnappy.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf_lite.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libprotos_all_cc_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/costs/libop_performance_data_cc_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/stream_executor/libstream_executor_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_runtime_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_id.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_init_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_lib.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/nsync/libnsync_cpp.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/liblookup_util.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/libinitializable_lookup_table.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libtensor_bundle.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libnaming.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_base.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgraph.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libgrappler_item.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libop_types.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libutils.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libbase.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libspinlock_wait.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libdynamic_annotations.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/gif_archive/libgif.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libjpeg.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libsimd_none.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_googlesource_code_re2/libre2.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/farmhash_archive/libfarmhash.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/fft2d/libfft2d.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libsip_hash.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libarch_specific.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/png_archive/libpng.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/zlib_archive/libzlib.pic.a -Wl,-no-whole-archive '-Wl,-rpath,$ORIGIN/' -Wl,-soname,libtensorflow_framework.so -ldl -lm -lpthread -lm -lpthread -lm -ldl -ldl -pthread -lm -lm -Wl,-z,relro,-z,now -Wl,--gc-sections -v -mandroid -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64)
ERROR: /tmp/tensorflow/arm/tensorflow/BUILD:744:1: Linking of rule '//tensorflow:libtensorflow_framework.so' failed (Exit 1): aarch64-linux-android-gcc failed: error executing command 
  (cd /root/.cache/bazel/_bazel_root/b46121d0546718834d76554a8a3bea26/execroot/org_tensorflow && \
  exec env - \
    PWD=/proc/self/cwd \
    PYTHON_BIN_PATH=/usr/bin/python \
    PYTHON_LIB_PATH=/usr/local/lib/python2.7/dist-packages \
    TF_NEED_CUDA=0 \
    TF_NEED_OPENCL_SYCL=0 \
  /android-arm/bin/aarch64-linux-android-gcc -shared -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libframework_internal_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libversion_lib.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_internal_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_hash_crc32c_accelerate_internal.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_proto_parsing.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/snappy/libsnappy.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf_lite.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libprotos_all_cc_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/costs/libop_performance_data_cc_impl.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/stream_executor/libstream_executor_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_runtime_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_id.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_init_impl.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_lib.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/nsync/libnsync_cpp.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/liblookup_util.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/libinitializable_lookup_table.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libtensor_bundle.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libnaming.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_base.pic.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgraph.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libgrappler_item.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libop_types.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libutils.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libbase.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libspinlock_wait.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libdynamic_annotations.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/gif_archive/libgif.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libjpeg.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libsimd_none.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/com_googlesource_code_re2/libre2.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/farmhash_archive/libfarmhash.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/fft2d/libfft2d.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libsip_hash.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libarch_specific.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/png_archive/libpng.pic.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/armeabi-opt/bin/external/zlib_archive/libzlib.pic.a -Wl,-no-whole-archive '-Wl,-rpath,$ORIGIN/' -Wl,-soname,libtensorflow_framework.so -ldl -lm -lpthread -lm -lpthread -lm -ldl -ldl -pthread -lm -lm -Wl,-z,relro,-z,now -Wl,--gc-sections -v -mandroid -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64)
Using built-in specs.
COLLECT_GCC=/android-arm/bin/aarch64-linux-android-gcc
COLLECT_LTO_WRAPPER=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/lto-wrapper
Target: aarch64-linux-android
Configured with: /usr/local/google/buildbot/src/android/gcc/toolchain/build/../gcc/gcc-4.9/configure --prefix=/tmp/ec4cb553ef61611c1d388a938c56382a --target=aarch64-linux-android --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/buildbot/tmp/build/toolchain/temp-install --with-mpfr=/buildbot/tmp/build/toolchain/temp-install --with-mpc=/buildbot/tmp/build/toolchain/temp-install --with-cloog=/buildbot/tmp/build/toolchain/temp-install --with-isl=/buildbot/tmp/build/toolchain/temp-install --with-ppl=/buildbot/tmp/build/toolchain/temp-install --disable-ppl-version-check --disable-cloog-version-check --disable-isl-version-check --enable-cloog-backend=isl --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --enable-bionic-libs --enable-libatomic-ifuncs=no --enable-initfini-array --disable-nls --prefix=/tmp/ec4cb553ef61611c1d388a938c56382a --with-sysroot=/tmp/ec4cb553ef61611c1d388a938c56382a/sysroot --with-binutils-version=2.27 --with-mpfr-version=3.1.1 --with-mpc-version=1.0.1 --with-gmp-version=5.0.5 --with-gcc-version=4.9 --with-gdb-version=none --with-gxx-include-dir=/tmp/ec4cb553ef61611c1d388a938c56382a/include/c++/4.9.x --with-bugurl=http://source.android.com/source/report-bugs.html --enable-languages=c,c++ --disable-bootstrap --enable-plugins --enable-libgomp --enable-gnu-indirect-function --disable-libsanitizer --enable-gold --enable-ld=default --enable-threads --enable-eh-frame-hdr-for-static --enable-fix-cortex-a53-835769 --enable-graphite=yes --with-isl-version=0.11.1 --with-cloog-version=0.18.0 --program-transform-name='s&^&aarch64-linux-android-&' --enable-gold
Thread model: posix
gcc version 4.9.x 20150123 (prerelease) (GCC) 
COMPILER_PATH=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/:/android-arm/bin/../libexec/gcc/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/
LIBRARY_PATH=/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/:/android-arm/bin/../lib/gcc/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/../lib64/:/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/:/android-arm/bin/../sysroot/usr/lib/
COLLECT_GCC_OPTIONS='-shared' '-o' 'bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so' '-pthread' '-v' '-mandroid' '-L/android-arm/sysroot/usr/lib' '-L/android-arm/lib' '-L/android-arm/lib64' '-L/android-arm/aarch64-linux-android/lib' '-L/android-arm/aarch64-linux-android/lib64' '-mlittle-endian' '-mabi=lp64'
 /android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/collect2 -plugin /android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/liblto_plugin.so -plugin-opt=/android-arm/bin/../libexec/gcc/aarch64-linux-android/4.9.x/lto-wrapper -plugin-opt=-fresolution=/tmp/ccIwFJZt.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-ldl -plugin-opt=-pass-through=-lgcc --sysroot=/android-arm/bin/../sysroot --eh-frame-hdr -shared -dynamic-linker /system/bin/linker64 -X -EL -maarch64linux --fix-cortex-a53-835769 --fix-cortex-a53-843419 -z noexecstack -z relro -z now -o bazel-out/armeabi-opt/bin/tensorflow/libtensorflow_framework.so /android-arm/bin/../sysroot/usr/lib/crtbegin_so.o -L/android-arm/sysroot/usr/lib -L/android-arm/lib -L/android-arm/lib64 -L/android-arm/aarch64-linux-android/lib -L/android-arm/aarch64-linux-android/lib64 -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x -L/android-arm/bin/../lib/gcc -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib/../lib64 -L/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/lib -L/android-arm/bin/../sysroot/usr/lib -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libframework_internal_impl.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libversion_lib.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_internal_impl.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_hash_crc32c_accelerate_internal.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/liblib_proto_parsing.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/snappy/libsnappy.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/protobuf_archive/libprotobuf_lite.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libprotos_all_cc_impl.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/costs/libop_performance_data_cc_impl.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/stream_executor/libstream_executor_impl.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_runtime_impl.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_impl.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_id.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_init_impl.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgpu_lib.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/nsync/libnsync_cpp.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/liblookup_util.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/kernels/libinitializable_lookup_table.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libtensor_bundle.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/util/tensor_bundle/libnaming.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libcore_cpu_base.pic.lo -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/libgraph.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libgrappler_item.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libop_types.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/tensorflow/core/grappler/libutils.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libbase.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libspinlock_wait.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/com_google_absl/absl/base/libdynamic_annotations.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/gif_archive/libgif.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libjpeg.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/jpeg/libsimd_none.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/com_googlesource_code_re2/libre2.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/farmhash_archive/libfarmhash.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/fft2d/libfft2d.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libsip_hash.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/highwayhash/libarch_specific.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/png_archive/libpng.pic.a -no-whole-archive -whole-archive bazel-out/armeabi-opt/bin/external/zlib_archive/libzlib.pic.a -no-whole-archive -rpath $ORIGIN/ -soname libtensorflow_framework.so -ldl -lm -lpthread -lm -lpthread -lm -ldl -ldl -lm -lm -z relro -z now --gc-sections -lgcc -lc -ldl -lgcc /android-arm/bin/../sysroot/usr/lib/crtend_so.o
/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: cannot find -lpthread
/android-arm/bin/../lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin/ld: cannot find -lpthread
collect2: error: ld returned 1 exit status

Can anyone tell me what is responsible for those last -lpthread linker flags?

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 14 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 29 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

tensorflowbutler commented 6 years ago

Nagging Assignee @petewarden: It has been 44 days with no activity and this issue has an assignee. Please update the label and/or status accordingly.

shashishekhar commented 6 years ago

This is similar to issue #20192 , let me know if the workaround mentioned doesn't work.

d4l3k commented 6 years ago

@shashishekhar Unless I'm misunderstanding something, that issue is totally different. This issue isn't about NDK issues. This issue is that Tensorflow doesn't support building C++ library for use on android.

shashishekhar commented 6 years ago

@d4l3k : For building C++ on Android you will use the NDK toolchain, which is used by bazelunderneath. Tensorflow does support building armeabi-v7a as well as arm64 on Linux.

@xav12358 : I should mention that we have Tensorflow lite : https://www.tensorflow.org/mobile/tflite/ which is better suitable for Android/iOS and mobile devices and has been designed specifically for mobile computationally constrained devices. Do let me know if you have difficulty using it.

leeor-langer commented 5 years ago

If I understand correctly you would like to use Tensorflow on Android via a c++ API? If so, check out this repo and the following blog. These links will explain how to build a dynamic library (.so file) step by step.

digital-synapse commented 3 years ago

Please pardon my ignorance (which I can assure you is vast), but considering the complexity of the build pipeline (and the fact that it's 2021) why aren't the tensorflow c and python libraries along with the various language bindings compiled / provided in cross platform docker images.