Я новичок в 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)
...
Ты мне нужен помогите спасибо.