Когда я компилировал с помощью ndk-build с файлом "libtensorflowlite.so", я столкнулся с некоторыми ошибками - PullRequest
0 голосов
/ 12 января 2020

Я новичок в TFLite. Я хочу скомпилировать код на основе c ++ для нескольких устройств, таких как android, linux и др. c. Итак, я запустил свой код в local- linux и RPI с помощью файла libtensorflow.a и успешно выполнил этот код. Я делаю файл библиотеки stati c, используя make-файл, используя тензор потока для RPI и ubuntu. (./tensorflow/tensorflow/lite/tools/make/build_*.sh file), и я запустил свой исполняемый код на этих устройствах. (Я скомпилировал использование g ++ и arm- linux -gnueabihf-g ++)

И я попытался собрать для android. Но я столкнулся с некоторыми ошибками при сборке для Android. во-первых, я хочу, чтобы исполняемый код в оболочке ADB был задан как «arm64-v8a». Итак, я собрал общую библиотеку (файл libtensorflowlite.so), используя bazel для android. И я проверил, что запускается код «benchmark_model» в мой смартфон. (этот код построен с использованием bazel из проекта tenorflow), и я построил свой код с помощью ndk-build., но я столкнулся с некоторыми ошибками, которые "./obj/local/arm64-v8a/libtensorflowlite.so: undefined ссылка на `__register_atfork@LIBC '" Где я делаю ошибку во время сборки? .. мой код указан ниже.

Android .mk:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)   
    LOCAL_MODULE := tensorflowlite
    LOCAL_SRC_FILES := lib/android_64/libtensorflowlite.so
    include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)   
    LOCAL_CFLAGS += --std=c++11 -fPIC -funsafe-math-optimizations -ftree-vectorize -pie -lstdc++ -lpthread  -lrt -I$(LOCAL_PATH)/include    
    LOCAL_MODULE := MyCode
    LOCAL_SRC_FILES := main.cc
    LOCAL_SHARED_LIBRARIES += tensorflowlite    
    include $(BUILD_EXECUTABLE)

Application.mk:

    APP_STL := c++_static

основной код: это очень простой код (только некоторая предварительная обработка для моего проекта и запуск интерпретатора с использованием tflite)

включает путь: заголовочный файл tenorflow и заголовочный файл flatbuffer

Возникла ошибка при сборке с использованием ndk-build:

$~/:$ ndk-build APP_ABI=arm64-v8a 

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16
[arm64-v8a] Compile++      : MyCode <= main.cc
[arm64-v8a] Prebuilt       : libtensorflowlite.so <= jni/lib/android_64/
[arm64-v8a] Executable     : MyCode
./obj/local/arm64-v8a/libtensorflowlite.so: undefined reference to `__register_atfork@LIBC'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Когда я проверяю файл "libtensorflowlite.so", используя команды "file" и "readelf" в ubuntu, который является моим локальным P C .

$~/: file lib/android_64/libtensorflowlite.so
libtensorflowlite.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped

$~/: readelf --dynamic lib/android_64/libtensorflowlite.so
Dynamic section at offset 0x2202b8 contains 32 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libm.so]
 0x0000000000000001 (NEEDED)             Shared library: [liblog.so]
 0x0000000000000001 (NEEDED)             Shared library: [libdl.so]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so]
 0x000000000000000e (SONAME)             Library soname: [libtensorflowlite.so]
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN/:$ORIGIN/..]
 0x0000000000000019 (INIT_ARRAY)         0x22cb60
 0x000000000000001b (INIT_ARRAYSZ)       536 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x22cd78
 0x000000000000001c (FINI_ARRAYSZ)       16 (bytes)
...

Ты мне нужен помогите спасибо.

1 Ответ

0 голосов
/ 13 января 2020

Спасибо за чтение. Я решил эту ошибку. это просто несовпадение версий для android. Файл tflite.so был скомпилирован из ANDROID -26. Но, когда мой код был скомпилирован, цель компилятора ANDROID -18. потому что я не настроен на настройку в файле Application.mk. Итак, настройка по умолчанию «NDK-build» - ANDROID -18. Итак, мой исполняемый код и файл не совпадали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...