是android. sdk里面没得gal. 只有jpeg和ovxlib @Frank
@jasonl 求助。android npu sdk没得libGAL.so …
static {
System.loadLibrary("openpose_npu");
System.loadLibrary("jpeg_t");
System.loadLibrary("ovxlib");
}
@Frank 改变顺序后报找不到libc++.so .
dlopen failed: library “libc++.so” not found
System.loadLibrary("jpeg_t");
System.loadLibrary("ovxlib");
System.loadLibrary("openpose_npu");
我拷贝了一个libc++_shared.so 改名过来。但是还是报dlopen failed: library “libGAL.so” not found
libGAL.so 这个库android 源码中是有的,可能不止缺这个库,你可以在源码中复制
@Frank 发现这个错误
E/linker: library "/system/vendor/lib/libGAL.so" ("/vendor/lib/libGAL.so") needed or dlopened by "/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/lib/arm/libGAL.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/lib/arm:/data/app/com.heaven7.android.vim3_npu-3mdYymw5U3yw-dk_W12nkQ==/base.apk!/lib/armeabi-v7a", permitted_paths="/data:/mnt/expand:/data/data/com.heaven7.android.vim3_npu"]
···
我查了一下。好像是说名称空间的问题。
Only the additional libraries added by silicon vendors or device manufacturers can be made accessible to apps. Starting from Android 8.0, vendor public libraries have the following additional restrictions and required setups: The native library in vendor must be properly labeled so it can be accessible to apps.
依赖的库
target_link_libraries(openpose_npu
jpeg_t
cutils
GAL
NNArchPerf
archmodelSw
OpenVX
VSC
ovxlib
jnigraphics
${log-lib}
)
现在报这个错: ndroid.vim3_npu: type=1400 audit(0.0:185): avc: denied { execute } for path="/vendor/lib/libGAL.so" dev=“mmcblk0p16” ino=363 scontext=u:r:untrusted_app:s0:c47,c256,c512,c768 tcontext=u:object_r:vendor_file:s0 tclass=file permissive=1
单独跟踪发现在下面这行代码。setupGraph失败。
status = vsi_nn_SetupGraph( graph, FALSE );
我刷了最新的固件 和 下载了最新的npu sdk. 加载 ovxlib就报错。
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “vxCreateTensorFromHandle2” referenced by “/data/app/com.heaven7.android.vim3_npu-ljZcs6aRY7sDnvik5s6rMQ==/lib/arm/libovxlib.so”…
@Frank @jasonl
android
npu 6.4.3 .
固件: VIM3_Pie_V201112
@jasonl
步骤:
1, 下载npu sdk (6.4.3)
2, 下载好固件(V201112),并刷到vim3上。
3, 将新的libjpeg.so. 和 libovxlib.so(包含include头文件) 替换掉, (目录在android 下面jniLibs/armeabi-v7a)
case 代码是用之前转换好的基础上修改的。
4, 编译native 代码。ok. 没有任何报错信息。
5, 在/vendor/etc/public.libraries.txt中增加libs.
libcutils.so, libGAL.so, libNNArchPerf.so, libarchmodelSw.so, libOpenVX.so, libVSC.so
6., 运行时加载
```public static void loadLibs(){
loadLib("jpeg");
loadLib("cutils");
loadLib("GAL");
loadLib("NNArchPerf");
loadLib("archmodelSw");
loadLib("OpenVX");
loadLib("VSC");
loadLib("ovxlib");// 在使用新的npu sdk。加载这个就报错
loadLib("openpose_npu");
}
private static void loadLib(String name){
System.out.println("start load: " + name);
System.loadLibrary(name);
System.out.println("end load: " + name);
}
ps: android cmake 文件大致是这样的。
project(TENSORFLOW_DEMO)
cmake_minimum_required(VERSION 3.4.1)
# openpose
set(LIB_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
include_directories(src/main/cpp/include/applib/ovxinc/include)
include_directories(src/main/cpp/include/service/ovx_inc)
aux_source_directory(src/main/cpp/openpose src_openpose)
add_library(ovxlib SHARED IMPORTED)
set_target_properties(ovxlib PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libovxlib.so)
add_library(jpeg_t SHARED IMPORTED)
set_target_properties(jpeg_t PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libjpeg_t.so)
add_library(cutils SHARED IMPORTED)
set_target_properties(cutils PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libcutils.so)
add_library(GAL SHARED IMPORTED)
set_target_properties(GAL PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libGAL.so)
add_library(NNArchPerf SHARED IMPORTED)
set_target_properties(NNArchPerf PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libNNArchPerf.so)
add_library(archmodelSw SHARED IMPORTED)
set_target_properties(archmodelSw PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libarchmodelSw.so)
add_library(OpenVX SHARED IMPORTED)
set_target_properties(OpenVX PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libOpenVX.so)
add_library(VSC SHARED IMPORTED)
set_target_properties(VSC PROPERTIES IMPORTED_LOCATION ${LIB_DIR}/libVSC.so)
add_library(openpose_npu SHARED ${src_openpose})
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log)
target_link_libraries(openpose_npu
jpeg_t
cutils
GAL
NNArchPerf
archmodelSw
OpenVX
VSC
ovxlib
jnigraphics
${log-lib}
)