调用so库文件出错问题

physics1988 2011-04-25 11:44:19
大家好,我现在调用so库文件里面的方法时,老是会抛出invcationtargetexception.这个so库文件是我从别人的工程拿过来的应该没有问题,使用so库的文件导出函数的类也是直接拷过来的,代码如下,麻烦大家看看有什么问题?


package com.Andorid.Monitor;
public class H264Decoder {
public native boolean init();
public native int[] decode(byte[] src, int length);
public native void release();
//public native int getSequence();
public native int InitDecoder();
public native int[] getMax();
public native int UninitDecoder();
public native int DecoderNal(byte[] in, int insize, int set,byte[] out,int[]wah);
static {
/*
* 导入.so解码库文件
*/
System.loadLibrary("H264Android");
}

}
...全文
314 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
physics1988 2011-05-03
  • 打赏
  • 举报
回复

问题已解决;问题出在本地函数的命名上面:
工程A的包为erlangxiong.opencv.aa,引用本地函数JAVA类为OpenCV的话,jni接口本地函数命名为像JAVA_erlangxiong_opencv_aa_Opencv_fun();也是编译出来的so库文件中的本地接口全名;
而工程B中若我们直接加入编译好的so库并也用相同的JAVA类OpenCV来引用本地库和接口函数的话,编译打包都能通过,不过实际运行时碰到调用本地函数,程序会按照JAVA_erlangxiong_opencv_bb_Opencv_fun();来寻找so库中的函数,当然就寻找不到了。
我的做法是:
1 修改jni接口文件中的本地函数函数名为对应B工程的包和类;
2 重新用NDK-bulid编译,生成新的so库
3 so库加入libs/armbe中
4 编译、打包、安装程序,succeed!~
这样做的话感觉比较麻烦,启不是每个不同工程需要用库时都要重新编译了?
有没有其他办法解决呢?
原文链接
http://www.eoeandroid.com/thread-60793-1-1.html
散分了
dinjay 2011-04-25
  • 打赏
  • 举报
回复
mips的是mipso
dinjay 2011-04-25
  • 打赏
  • 举报
回复
要放在libs->armeabi目录下,不过要看这个so是用什么的编译器编出来的,如果是arm的,就放在armeabi目录下,如果是mips的,放在mipso32下
physics1988 2011-04-25
  • 打赏
  • 举报
回复
补充一下,我已经将libH264Android文件放到工程目录下libs的文件夹中
physics1988 2011-04-25
  • 打赏
  • 举报
回复
放了。还是不行。。楼上能告诉我遇到这种问题可以调试吗?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧