【问题标题】:android studio tensorflow cpp build - undefined referenceandroid studio tensorflow cpp build - 未定义的参考
【发布时间】:2018-01-25 16:57:29
【问题描述】:

我已经从 ghit 下载了 tensorflow, 我使用我的 android sdk 和 android ndk 配置 WORKSPACE 文件。

我从命令行运行 ./configure

我用 buzel 构建

bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --cpu=armeabi-v7a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --config=android --fat_apk_cpu=armeabi-v7a --verbose_failures

构建工作正常。

当我进入 Android Studio 时,我将我的 libtensorflow_inference.so 包含在 jnilibs 文件夹中,在 CMakefile.txt 中我包含了所有 .h 文件的目录和tenorflow 依赖项。

CMakefile.txt

#include header file
#TENSORFLOW
include_directories(${pathTensorflow})
#TENSORFLOW dependeces
include_directories(${pathToWorkspace}/downloads/nsync/public)
include_directories(${pathToWorkspace}/downloads/protobuf/src)
include_directories(${pathToWorkspace}/downloads/eigen)


#include tensorflow shared library
add_library( lib_TF SHARED IMPORTED )
set_target_properties(lib_TF PROPERTIES IMPORTED_LOCATION ${pathToProject}/src/main/jnilibs/${ANDROID_ABI}/libtensorflow_inference.so)

target_link_libraries( # Specifies the target library.
                  myLibcpp

                  lib_TF

                  ...
                  )

在我的文件 cpp 中,我已插入此代码

tensorflow::GraphDef graph_def;

但是当我运行 make 文件时,我收到了这个错误

Error:error: linker command failed with exit code 1 (use -v to see invocation)
Error:(100) undefined reference to 'tensorflow::GraphDef::GraphDef()'

【问题讨论】:

    标签: android c++ android-studio tensorflow native


    【解决方案1】:

    我有同样的问题,我的 cmake 设置和你的一样,这是输出:

    构建命令失败。 使用参数执行进程 cmake.exe 时出错 {--build \app.externalNativeBuild\cmake\debug\x86_64 --target native-lib}

    [1/2] 构建CXX对象native-lib.cpp.o

    [2/2] 链接CXX共享库libnative-lib.so

    失败:cmd.exe /C "cd . && x86_64-linux-android-g++.exe --sysroot=C:/Android/Sdk/ndk-bundle/sysroot -fPIC -isystem C:/Android/Sdk/ ndk-bundle/sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack - Wformat -Werror=format-security -std=c++14 -O0 -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot C:/Android/Sdk/ ndk-bundle/platforms/android-23/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl, -z,noexecstack -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ..\native-lib.cpp.o -llog ../libs/ tf_libs/x86_64/libtensorflow_inference.so -latomic -lm "C:/Android/Sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/libgnustl_static.a" && cd ."

    \app\src\main\cpp/native-lib.cpp:15:错误:未定义对“TF_Version”的引用

    collect2.exe:错误:ld 返回 1 个退出状态

    ninja:构建停止:子命令失败。

    所以它似乎正在链接库(-llog ../libs/tf_libs/x86_64/libtensorflow_inference.so),但由于某种原因找不到符号。

    我找不到任何关于 -llog 作用的信息。

    我试过 gcc 和 clang 工具链。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2021-11-05
      • 2020-01-05
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多