NDK使用动态库(共享库的有关问题)

NDK使用动态库(共享库的问题)
本帖最后由 Thomas082 于 2012-03-20 23:47:15 编辑
(1)生成动态库

建一个名为JNI的文件夹,之后在里面添加两个文件,分别是add.c和Android.mk,如下所示

add.c
#include <stdio.h>

int add(int a, int b)
{
   return a + b;
}


Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

  LOCAL_MODULE := add
  LOCAL_SRC_FILES := add.c
    
include $(BUILD_SHARED_LIBRARY)


ndk-build之后,得到了libadd.so


(2)修改hello-jni项目

hello-jni是自带的列子,我试图在返回字符串之前调用一下动态库里的add(int,int)方法,修改后如下

hello-jni.c
#include <string.h>
#include <jni.h>
#include <stdio.h>
#include <add.h>

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
    add(1, 2);
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}


Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := add
LOCAL_SRC_FILES := libadd.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_SHARED_LIBRARIES := add

include $(BUILD_SHARED_LIBRARY)


对了,我还在include文件中添了一个简单的add.h
int add(int a, int b)


我当然也在JNI目录下加了libadd.so

最后我当然用NDK 7 编译通过了,并且在\hello-jni\libs\armeabi有两个库libadd.so和libhello-jni.so
库libadd.so,是自动复制过去的,不是我手动复制过去的

本来觉得这下应该没问题了吧,可是抛出错误:
03-20 23:17:30.434: D/dalvikvm(192): Trying to load lib /data/data/com.example.hellojni/lib/libhello-jni.so 0x43757ca8
03-20 23:17:30.474: I/dalvikvm(192): Unable to dlopen(/data/data/com.example.hellojni/lib/libhello-jni.so): Cannot load library: link_image[1638]:    30 could not load needed library 'libadd.so' for 'libhello-jni.so' (load_library[984]: Library 'libadd.so' not found)


我非常不明白这是为什么呢?大家有遇到过这个问题吗?该如何解决呢?


------解决方案--------------------
LOCAL_SHARED_LIBRARIES := -ladd  加上-l
------解决方案--------------------


LOCAL_SHARED_LIBRARIES := add 这样没错