Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我使用ndk编译时,使用;libtensorflowlite.so“;在文件中,我遇到了一些错误_Tensorflow_Tensorflow Lite_Ndk Build - Fatal编程技术网

当我使用ndk编译时,使用;libtensorflowlite.so“;在文件中,我遇到了一些错误

当我使用ndk编译时,使用;libtensorflowlite.so“;在文件中,我遇到了一些错误,tensorflow,tensorflow-lite,ndk-build,Tensorflow,Tensorflow Lite,Ndk Build,我是TFLite的初学者。 我想编译基于C++的多功能代码,如Android、Linux等。 因此,我使用libtensorflow.a文件在本地linux和RPI中运行了代码,并成功地运行了该代码。 我使用tensorflow Project为RPI和ubuntu创建了一个静态库文件。 (./tensorflow/tensorflow/lite/tools/make/build.*.sh文件),我在这些设备中运行了可执行代码。(我使用g++和arm-linux-gnueabihf-g++编译)

我是TFLite的初学者。 我想编译基于C++的多功能代码,如Android、Linux等。 因此,我使用libtensorflow.a文件在本地linux和RPI中运行了代码,并成功地运行了该代码。 我使用tensorflow Project为RPI和ubuntu创建了一个静态库文件。 (./tensorflow/tensorflow/lite/tools/make/build.*.sh文件),我在这些设备中运行了可执行代码。(我使用g++和arm-linux-gnueabihf-g++编译)

而且,我试着为android构建。 但是,我在为Android构建时遇到了一些错误。 首先,我想在ADB shell中编写可执行代码,目标是“arm64-v8a”。 因此,我使用bazel for android构建了共享库(libtensorflowlite.So文件)。 并且,我检查了我的智能手机中是否运行了“benchmark_model”代码(该代码是使用tensorflow项目中的bazel构建的) 而且,我使用ndk构建构建了我的代码。 但是我遇到了一些错误,“/obj/local/arm64-v8a/libtensorflowlite.so:对`\u寄存器的未定义引用”_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运行解释器)

包含路径: tensorflow的头文件和flatbuffer的头文件

使用ndk生成期间遇到错误:

$~/:$ 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)
我需要你的帮助。谢谢。谢谢阅读。 我解决了这个错误。 这只是android的版本不匹配。 tflite.so文件是从ANDROID-26编译的。 但是,当我的代码被编译时,编译器的目标是ANDROID-18。 因为,我没有在Application.mk文件中设置目标。 因此,“NDK构建”选择默认设置是ANDROID-18。
因此,我的可执行代码和So文件不匹配。

我会小心像您这样组合工具链。如果您使用Android或使用我们提供的bazel构建构建AAR,我建议您使用预编译AAR。makefile是我们主要为Raspberry Pi等SOC提供的一个尽力而为的配置。
$~/: 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)
...