各位大牛,我现在在学习Android下NDK调用第三方的库,我现在不明白的是这个so必须得是通过ndk的方式编译成的吗?
现在我的so是在linux下通过交叉编译的方式形成的,那这样的话在ndk下可以调用吗?我按照论坛里用预编译的方法试过了,不好使啊?提示找不到第三方库里的函数?
我又按照网上的提供的这种方法编译通过了,可是在载入的时候,就出错了,错误信息是打不开生成的这个库。
其中android.mk如下:
LOCAL_PATH:= $(call my-dir)
获取local_path 路径
MY_LOCAL_PATH := $(LOCAL_PATH)
存储一个根路径的指针
include $(CLEAR_VARS)
清除所有local变量
LOCAL_PRELINK_MODULE := false
不引入前制模块
LOCAL_SRC_FILES := libIMARJni.c
本地文件路径
LOCAL_SHARED_LIBRARIES := libIMAR
第三方库文件,不用加后缀.so
LOCAL_PREBUILT_LIBS : = $(LOCAL_PATH)/libIMAR.so
预载入库文件,第三方库绝对路径
LOCAL_LDFLAGS :=  $(LOCAL_PATH)/libIMAR.so
这一句是必须的,加载库文件标识,第三方库绝对路径
LOCAL_MODULE    += libIMARJni
当前模块名称,因为引用了别的模块所以使用 +=
LOCAL_PATH:= $(MY_LOCAL_PATH)
重置LOCAL_PATH指针
include $(BUILD_SHARED_LIBRARY)
创建动态库

解决方案 »

  1.   

    补充一点:就是如果调用linux交叉编译生成的.so,大家有没有好的办法,我现在初步想的是先编一个.cpp文件来调用这个.so,然后把这个.cpp用ndk的方式编译成一个新的so,然后再调用这个新的so 不知道这种方法行不行!
      

  2.   

     LINUX:  Update your PATH to point to the Android NDK Platform directory. If you use bash shell, add the following to the ~/.bashrc file:export PATH=~/bin:/opt/android-sdk-linux_x86/tools/:/opt/android-ndk-r7:$PATH
      

  3.   

    可是这样做的话 在载入的时候 提示找不到链接库 网上查找的是要把这个第三方的库放到模拟器的system/lib下 可是这个是只读的 怎么放进去啊
      

  4.   

    百度  android  jni 静态库
      

  5.   

    so文件当然有规定了,必须是ARM处理器的啊,pc上的都是x86的,同时ARM根据CPU还分版本的