移植yolo到android时,编译没错,运行时报错:
03-24 17:36:30.029: E/AndroidRuntime(28453): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: load_library(linker.cpp:761): not a valid ELF executable: /data/app-lib/com.ndk.testndk-2/libyoloso.so
03-24 17:36:30.029: E/AndroidRuntime(28453): at java.lang.Runtime.loadLibrary(Runtime.java:371)
03-24 17:36:30.029: E/AndroidRuntime(28453): at java.lang.System.loadLibrary(System.java:535)
03-24 17:36:30.029: E/AndroidRuntime(28453): at com.ndk.testndk.JniClient.<clinit>(JniClient.java:5)
03-24 17:36:30.029: E/AndroidRuntime(28453): ... 15 more
box encode_box(box b, box anchor)
{
box encode;
encode.x = (b.x - anchor.x) / anchor.w;
encode.y = (b.y - anchor.y) / anchor.h;
encode.w = log2(b.w / anchor.w);
encode.h = log2(b.h / anchor.h);
return encode;
}
就是log2这个函数的问题,很奇怪,在别的文件里面单独运行比如log2(4.0f)是正常的。
改为如下就ok了:
box encode_box(box b, box anchor)
{
box encode;
encode.x = (b.x - anchor.x) / anchor.w;
encode.y = (b.y - anchor.y) / anchor.h;
encode.w = log(b.w / anchor.w)/log(2);
encode.h = log(b.h / anchor.h)/log(2);
return encode;
}