【问题标题】:"/system/bin/linker: No such file or directory" error trying to compile TensorFlow尝试编译 TensorFlow 时出现“/system/bin/linker: No such file or directory”错误
【发布时间】:2018-06-04 09:06:00
【问题描述】:

我正在尝试为运行 the building script 的 Android 编译 tensorflow-lite,但构建过程因以下错误而停止:

/system/bin/linker: No such file or directory

我可以理解构建过程是如何工作的 (compilation + linking),但我不明白为什么需要这个“/system/bin/linker”。此链接器不存在于 SDK 或 NDK 文件夹中,也不存在于主机的文件夹树中(我使用 Linux 进行构建过程)。

它看起来像是 Android 文件结构的一部分,但构建过程不应该依赖于最终的系统结构。

我正在尝试构建的元素是“schema_fbs”,它使用平面缓冲区(第 3 方依赖项)编译部分代码。我使用的完整句子是:

bazel build \
--cxxopt='--std=c++11' \
--crosstool_top=//external:android/crosstool \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--cpu=armeabi-v7a \
--verbose_failures \
--subcommands \
//tensorflow/contrib/lite/schema:schema_fbs

这可能是由 Bazel 构建脚本中的测试用例引起的(我已经评论了我找到的所有测试),但为什么需要链接器?在编译过程中我需要做些什么来定义这个“系统”文件夹吗?

注意事项:

目标操作系统:Android

主机操作系统:Ubuntu 16.04

使用的 NDK:v16b(使用 v17 测试但不兼容)

完整的错误信息:

INFO: Analysed target //tensorflow/contrib/lite/schema:schema_fbs_srcs (0 packages loaded).
INFO: Found 1 target...
SUBCOMMAND: # //tensorflow/contrib/lite/schema:schema_fbs_srcs [action 'Generating flatbuffer files for schema_fbs_srcs: //tensorflow/contrib/lite/schema:schema_fbs_srcs']
(cd /home/user/.cache/bazel/_bazel_user/73606864f5ec4cce18dd83a6cbcd2bc2/execroot/org_tensorflow && \
  exec env - \
    LD_LIBRARY_PATH=/usr/local/lib:/home/user/Libraries/llvm-4.0.0.src/build/lib: \
    PATH=/home/user/Software/git-sizer:/home/user/Android/Sdk/platform-tools:/home/user/anaconda3/bin:/home/user/Libraries/llvm-4.0.0.src/build/bin:/home/user/bin:/home/user/repo/caffe/build/install/lib:/home/user/Software/cmake-3.10.3-Linux-x86_64/bin:::::/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
  /bin/bash -c 'source external/bazel_tools/tools/genrule/genrule-setup.sh; for f in tensorflow/contrib/lite/schema/schema.fbs; do bazel-out/armeabi-v7a-opt/bin/external/flatbuffers/flatc --no-union-value-namespacing --gen-object-api  -c -o bazel-out/armeabi-v7a-opt/genfiles/tensorflow/contrib/lite/schema $f; done')
ERROR: /home/user/Repositories/git/tensorflow/tensorflow/contrib/lite/schema/BUILD:57:1: Generating flatbuffer files for schema_fbs_srcs: //tensorflow/contrib/lite/schema:schema_fbs_srcs failed (Exit 255): bash failed: error executing command 
  (cd /home/user/.cache/bazel/_bazel_user/73606864f5ec4cce18dd83a6cbcd2bc2/execroot/org_tensorflow && \
  exec env - \
    LD_LIBRARY_PATH=/usr/local/lib:/home/user/Libraries/llvm-4.0.0.src/build/lib: \
    PATH=/home/user/Software/git-sizer:/home/user/Android/Sdk/platform-tools:/home/user/anaconda3/bin:/home/user/Libraries/llvm-4.0.0.src/build/bin:/home/user/bin:/home/user/repo/caffe/build/install/lib:/home/user/Software/cmake-3.10.3-Linux-x86_64/bin:::::/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
  /bin/bash -c 'source external/bazel_tools/tools/genrule/genrule-setup.sh; for f in tensorflow/contrib/lite/schema/schema.fbs; do bazel-out/armeabi-v7a-opt/bin/external/flatbuffers/flatc --no-union-value-namespacing --gen-object-api  -c -o bazel-out/armeabi-v7a-opt/genfiles/tensorflow/contrib/lite/schema $f; done')
/system/bin/linker: No such file or directory
Target //tensorflow/contrib/lite/schema:schema_fbs_srcs failed to build
INFO: Elapsed time: 0.572s, Critical Path: 0.02s
INFO: 0 processes.
FAILED: Build did NOT complete successfully

【问题讨论】:

  • 我猜测本地 cc 工具链设置不正确,或者没有安装。您能否包含更多错误(例如,bazel 在尝试构建时遇到了什么问题)?你在哪个平台?如果是 Ubuntu 或类似系统,您是否安装了这些软件包? docs.bazel.build/versions/master/…
  • 如果你是mac,可能需要安装xcode:docs.bazel.build/versions/master/…
  • 另外,您使用的是哪个版本的 NDK?
  • 我在问题正文中包含了一些信息。安装了教程中描述的软件包,并且我已经使用独立 SDK 和 Android Studio 下载的 SDK 进行了测试(对于 NDK 也是如此)。在所有情况下都出现相同的错误。
  • 感谢您提供更多信息。不幸的是,我无法重现该问题(bazel 0.14、ubuntu、ndk 16b)。值得注意的是,我也没有/system 目录。您是否也可以尝试使用--subcommands 运行 bazel 以查看哪个操作失败?

标签: android c++ cross-compiling bazel tensorflow-lite


【解决方案1】:

也可以使用以下方式构建 TensorFlow Lite AAR:

bazel build --cxxopt='--std=c++11' -c opt --fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a tensorflow/contrib/lite/java:tensorflow-lite

并且您必须确保运行 ./configure 并让它为您配置 SDK 和 NDK。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2017-04-24
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多