gpt4 book ai didi

c++ - 编译用于ARM64-v8a的Tensorflow C++ API

转载 作者:行者123 更新时间:2023-12-01 14:59:07 29 4
gpt4 key购买 nike

这是我发布的 tensorflow 问题的链接。

https://github.com/tensorflow/tensorflow/issues/16795

我尝试在android arm64-v8a上编译tensorflow C++ API,但被卡住了。这是我尝试编译的代码:

bazel build -c opt --cxxopt='--std=c++11'   //tensorflow:libtensorflow_cc.so --config=android_arm64 --cpu=arm64-v8a --fat_apk_cpu=arm64-v8a --verbose_failures

I get that error:

1 warning generated.
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

是否可以编译tensorflow C++ API?

我使用NDK 14b

最佳答案

道歉,要求您及时回复,但希望对其他人有所帮助。这是为armeabi-v7a构建它的方式(我尚未为arm64-v8a测试过它):

导出NDK_ROOT ='/ root / of / ndk / directory'(在我的试验中,tensorflow仅使用经过测试的r14b或更低的r10d编译;如果不正确,请更正)

tensorflow/contrib/makefile/download_dependencies.sh
tensorflow/contrib/makefile/compile_android_protobuf.sh -c -a [x86 | armeabi-v7a | arm64-v8a]
export HOST_NSYNC_LIB=`tensorflow/contrib/makefile/compile_nsync.sh -a [x86 | armeabi-v7a | arm64-v8a]`
export TARGET_NSYNC_LIB=`CC_PREFIX="${CC_PREFIX}" NDK_ROOT="${NDK_ROOT}" tensorflow/contrib/makefile/compile_nsync.sh -t android -a [x86 | armeabi-v7a | arm64-v8a]`
make -f tensorflow/contrib/makefile/Makefile TARGET=ANDROID ANDROID_ARCH=arm64-v8a

注意:
  • 确保将ANDROID_ARCH设置为要构建的
  • 使用NDK 10d或14b工具链可能会引发以下错误:
    /tmp/77a95b0085967f7191ad958665724b6f/sysroot/usr/include/unistd.h:173:错误:未定义对“__page_size”的引用
    可以通过在TF_ROOT / tmp目录中创建一个名为dummy_lib.a的虚拟库并进行链接来避免这种情况。
  • 使用NDK 14b构建应用程序还需要包含仅--std = c++ 11语言指令。 c++ 14和c++ 17似乎不起作用。
  • 所使用的
  • std lib应该为gnuSTL_static才能链接。需要重新定义std::string中的一些标准函数-即to_string()和stoi()。

  • @dev dev,您能为arm64-v8a编译它吗?如果成功,请发表您的做法。

    希望这可以帮助。

    编辑:

    我只是使用上面的arm64-v8a构建的,它似乎正在工作。

    关于c++ - 编译用于ARM64-v8a的Tensorflow C++ API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647592/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com