Closed xav12358 closed 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
I modify my first post. Is "libtensorflow_cc.so" well the project to build the C++ API of tensorflow on Android?
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
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
@asimshankar do you own android builds?
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?
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.
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.
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.
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.
I still have no solution to build Tensorflow for Cpp on Android ...
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.
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.
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.
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.
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
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?
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.
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.
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.
This is similar to issue #20192 , let me know if the workaround mentioned doesn't work.
@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.
@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.
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.
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.
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:
bazel build --cxxopt=--std=c++11 -c opt //tensorflow:libtensorflow_cc.so --verbose_failures --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=arm64-v8a