我试图在Android上用C++运行神经网络.示例(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/android)显示如何使用tensorflow使用JAVA apis,它使用JNI函数调用C++.有人试图在Android上直接在C++中使用tensorflow吗?如何在Android上使用C++ apis构建和链接tensorflow库.你能指导我吗?我想在Android上以类似于iOS示例的方式使用C++ apis.
这是我解决此问题的方法。尽管没有太多关于在android上使用c ++ api以及将tensorflow编译并链接到NDK的文档,但是makefile具有重要的注释以及相关的脚本。编译步骤与ios非常相似。
安装以下依赖项a)autoconf b)automake c)automake。然后运行tensorflow / contrib / makefile / download_dependencies.sh; 当它运行良好时,我第一次运行于2017年5月10日存储库。在6月1日前后的更高版本中,由于tensorflow / workspace.bzl中的某些更改,我在download_dependencies.sh中无法理解,无法识别tar文件download_dependencies正在尝试下载。我只是从5月10日回购提交中替换了workspace.bzl。
第2步是这样运行tensorflow / contrib / makefile / compile_android_protobuf.sh
NDK_ROOT =绝对/路径/到/ ndk /文件夹./tensorflow/contrib/makefile/compile_android_protobuf.sh
运行make。但是首先,您可能需要在Makefile中进行一些更改。用-fPIC标志替换-fPIE标志。还要将-fPIC标志添加到HOST_CXXFLAGS。然后像这样运行make:
make -f tensorflow / contrib / makefile / Makefile TARGET = ANDROID NDK_ROOT =绝对/路径/到/ ndk /文件夹
另外,也可以一次运行build_all_android.sh,它一次执行所有3个步骤,但是您可能需要对标记进行Makefile更改。
这生成了tensorflow / contrib / makefile / gen / protobuf / lib / libprotobuf.a和tensorflow / contrib / makefile / gen / lib / libtensorflow-core.a; 这可以链接到LOCAL_LDLIBS下的Android.mk文件中的Android NDK项目。应该-Wl,--build-id -Wl,--allow-multiple-definition -Wl,--whole-archive
在Android.mk文件中的LOCAL_CFLAGS中使用-std = c ++ 11,在Application.mk文件中使用APP_STL:= gnustl_shared。
这足以构建您的NDK项目的共享库。