android NDK jni

nigntaiye 发布于 2014/11/28 20:29
阅读 557
收藏 3

    最近需要在android下面做点东西,需要用到以前编写好的C的代码,查询后,得知可以在android下使用NDK工具,生成本地C的so库,通过java的JNI来调用C.so库中的函数。

    环境:linux-ubuntu14.04(32位)  eclipse  android-ndk-r10c

以前写的C代码需要用到及几个库,gmp,glib,pbc,openssl(crypto ssl),通过交叉编译工具,已经生成了android arm架构下的对应库文件。

NDK最重要的应该是jni文件夹下的文件,我的jni文件夹结构如下图:

              

libneed文件夹是我所要用到的库文件,都是交叉编译过后的。其中gobject-2.0,gthread-2.0,gmodule-2.0三个库是编译glib-2.0库时附带生成的,我也不知道有什么用,反正都加进去了,gmpxx.a也是生成gmp时附带生成的。

我的Android.mk文件:

      

Android.mk文件中有4个.c的源文件,tl-kp-enc.c common.c core.c misc.c。其中tl-kp-enc.c文件需要调用core.c common.c misc.c三个文件中的函数以及数据结构。core.c common.c misc.c三个文件依赖于库libpbc,openssl库,glib库,而pbc库又依赖gmp库,对应的头文件见我的jni结构截图:glib-2.0 openssl pbc三个文件夹和jni目录下的相应头文件。

在编写Android.mk文件后,通过ndk-build生成.so过程中,有一个库中的几个方法找不到。截图如下:

这三个函数对应的.o属于pbc库中,为此我用nm命令查看libneed文件夹下的libpbc.a库文件,分别在pairing.o和dlog.o中找到:

            

头文件分别位于pbc文件夹下的pbc_field.h与pbc_pairing.h中:

 

就这三个函数找不到,其他的函数编译时没有提示,应该是能找到,但库libpbc.a中明明有对应的函数.o,个人表示很不理解,找不到问题所在,是出在了Android.mk文件的编写上面还是生成的这个库有问题,求教。。。

加载中
0
nigntaiye
nigntaiye
找到问题所在,还是库的移植有问题,从新编译了pbc后,问题解决
返回顶部
顶部