Я не могу собрать .so файл - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать приложение для обнаружения объектов, используя тензор потока, и я следую инструкциям, перечисленным на этом сайте:

https://www.skcript.com/svr/realtime-object-and-face-detection-in-android-using-tensorflow-object-detection-api/

Но я столкнулся с ошибками сборки.

Я делаю приложение для Android для обнаружения объектов с использованием API tenorflow, и я выполнил все шаги, как указано в ссылке выше.Я использую Windows 10 для кодирования, а не дистрибутив Linux.Я пытался собрать приложение, используя bazel, но есть ошибки сборки.

Вот команда, указанная на приведенном выше веб-сайте:

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

После запуска оно начинает компиляцию и выполняет 1069 процессов, нопосле достижения 1068/1069 он отображает следующее:

ERROR: C:/sri/sritrain/tensorflow-master/tensorflow/contrib/android/BUILD:60:1: Linking of rule '//tensorflow/contrib/android:libtensorflow_inference.so' failed (Exit 1)
external/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: fatal error: bazel-out/armeabi-v7a-opt/bin/tensorflow/core/kernels/libandroid_tensorflow_kernels.lo: pread failed: Invalid argument
clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
Target //tensorflow/contrib/android:libtensorflow_inference.so failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 3148.512s, Critical Path: 443.26s
INFO: 1045 processes: 1045 local.
FAILED: Build did NOT complete successfully

Я полистал интернет и обнаружил небольшую модификацию, поэтому набрал:

bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=armeabi-v7a --cxxopt=-std=c++11

Однако это возвращает ошибку даже до того, какпредыдущая команда выполнила:

ERROR: C:/sri/sritrain/tensorflow/tensorflow/contrib/android/BUILD:60:1: Linking of rule '//tensorflow/contrib/android:libtensorflow_inference.so' failed (Exit 1)
external/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: fatal error: bazel-out/armeabi-v7a-opt/bin/tensorflow/core/kernels/libandroid_tensorflow_kernels.lo: pread failed: Invalid argument
clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
Target //tensorflow/contrib/android:libtensorflow_inference.so failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 2787.155s, Critical Path: 244.57s
INFO: 795 processes: 795 local.
FAILED: Build did NOT complete successfully

Предполагается создать файл .so на моем компьютере, но это не так.

1 Ответ

0 голосов
/ 28 декабря 2018

Я решил это!Я обнаружил, что проблема заключалась в том, что я использовал пакет ndk из папки Android Studio, и это был последний ndk.Я скачал старую версию ndk android_ndk_r15c и выполнил команду:

bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=armeabi-v7a --cxxopt=-std=c++11

Итак, сборка была успешно завершена!

...