我没有使用ndk方式生成.so,
而是直接使用gcc编译生成。
我把生成好的.so文件放在eclipse工程的libs/armeabi下,
loadLibrary的时候参数名是正确的,通过ddms看data/data/包名/lib/也有这个文件。
但最终却抛出了java.lang.ExceptionInInitializerError
Caused by:java.lang.UnsatisfiedLinkError:Library xxx cannot found。
这怎么回事啊?我新手,看网上有说修改文件权限的,我试了也没用。
难道必须用ndk方式编译?

解决方案 »

  1.   

    你的GCC编译出来的是ARM体系结构的么?
      

  2.   

    标志gcc编译出来是不能用的,因为标志gcc编译出来是x86cpu的指令系统,而android是arm架构cpu
    所以你要使用arm-gcc,ndk里面带有arm-gcc,当然你也可以不用ndk,但是必需要有arm-gcc.
      

  3.   

    首先,如果是用系统编译的so,你需要写JNI_OnLoad()函数,这个是so的入口,而且你要在这个函数里面注册你的所有函数,这样在java层才能调用到你的函数,你出错的原因估计是因为没有写JNI_OnLoad() 这个入口函数,或者是没有注册函数导致的