需要给android端提供so包,且so包是纯c写的。
但是Android那边拿到so包后,运行一直报错,dlopen error:cannot locate symbol xxx(so包里的函数名).
android端一直怀疑是我的so包的问题,为此他专门用NDK写了个cpp的so包,调用成功。锅甩到了我头上。
我开始研究他的这个app的Java代码。
有一行,System.loadLibrary("xxx").
为此,我试了好几天,明悉了脉络。
发现:
他的NDK的so包(比如libmynativeso.so),调用了c++的so包(比如libadd.so),只需要写:
System.loadLibrary("mynativeso");一行就够了;
而调用纯c的so包(比如liblog.so),需要写两行:
System.loadLibrary("log");
System.loadLirary("mynativeso");
这样才不会报错。
好,这个问题记录一下,以供参考。