android ndk开发:JNI中怎的引用so动态库中的函数

android ndk开发:JNI中怎样引用so动态库中的函数
最近小弟在进行ndk的开发中遇到无法将动态库中的函数用到自己写的JNI函数中,比如:



#include <jni.h>   
#include "HelloJni.h"   
#include <stdio.h>   
  
JNIEXPORT void JNICALL    
Java_HelloJni_displayHelloJni(JNIEnv *env, jobject obj)    
{   
    int i = callFuncLib();  // this function is defined in lib libmy.so

    return;   
}  




情况就是这样, 我需要调用libmy.so动态库中的函数callFuncLib(), 怎样倒入, 是在Android.mk文件中修改make文件,还是用adb push。 

注:开发平台是在android 2.0

请大侠们不吝指教一二!!必当高分送上
------最佳解决方案--------------------
jni中用so的函数,这个真没试过,本来so中封装的就是jni的方法了,java层可以直接调用,但是在jni的c实现里,都是c的方法,没法去调用其他jni中的java方法...
libmy.so这个库没有.a的么?只有so的?jni中可以调用c的接口,但是调用java的好像不行
------其他解决方案--------------------
jni封装C的方法,但是一般c的方法都是以.a的形式编译出来的库
没有试过,你可以在mk文件中假如lib.so的文件名,然后jni的c实现里去调用,不过不知道能不能链到so里函数,你没有试过么?
------其他解决方案--------------------
http://topic.csdn.net/t/20030520/13/1808721.html
这儿有一个相关的帖子,你作一下参考.
------其他解决方案--------------------
引用:
jni中用so的函数,这个真没试过,本来so中封装的就是jni的方法了,java层可以直接调用,但是在jni的c实现里,都是c的方法,没法去调用其他jni中的java方法...
libmy.so这个库没有.a的么?只有so的?jni中可以调用c的接口,但是调用java的好像不行


libmy.so不是java库,是已经写好的c库,我需要用jni封装这个库,jni不就是用来做这个的吗!
------其他解决方案--------------------
引用:
jni封装C的方法,但是一般c的方法都是以.a的形式编译出来的库
没有试过,你可以在mk文件中假如lib.so的文件名,然后jni的c实现里去调用,不过不知道能不能链到so里函数,你没有试过么?


可能是我没有表达清楚, 我的意思就是试着链连so方件。
一个可行的方法就是把我想要用到的libmy.so文件放到ndk的platform/android */*arm/lib目录下,然后在mk文件中用-lmy来连接这个动态库文件。但这个方法不足的就是你需要手动copy库文件到ndk目录下,这不是软件发布时可用到的技术,可能应付一下一时之需。

问一下哪问大侠曾遇到过这个问题的,又是怎么解决的?
------其他解决方案--------------------
DLOPEN 自己搜搜 对调用需要的接口都需实现
------其他解决方案--------------------
该回复于2010-12-02 16:03:38被版主删除
------其他解决方案--------------------
dlopen就可以了

不过android实现的方式和正常linux不一样,需要把so库的源代码拿过来重新编译才可以。
要不然,你得将标准linux的那堆libc及相关的函数库,再搞一套,放在一个新建的/lib或/usr/lib下面才可以。
------其他解决方案--------------------
我回复了怎么没有加积分呢?

------其他解决方案--------------------
引用:
我回复了怎么没有加积分呢?

每天回复有10分可用分...
------其他解决方案--------------------
两种
1、dlopen方式
2、在mk文件中引用so库,这个so库要push到system/lib下
------其他解决方案--------------------
留个邮箱,发个android中通过jni调用so的demo你。

------其他解决方案--------------------
static {
         System.loadLibrary("libsetNet"); //
     }
 
public native void setNet(String str);
------其他解决方案--------------------