将依赖的.so文件与Android的ndk-build链接

时间:2013-01-16 23:30:43

标签: android android-ndk

我创建了一个.so文件,它通过JNI公开对Java的本机C调用。这很好用,如果我只在我的C代码中使用系统库,我可以将应用程序部署到我的Android系统上。但是,如果我想调用其他.so文件中的函数,我无法正确链接我的项目。

例如,假设我有“libotherso.so”文件,其中包含C中定义的API,我可以从我用来生成“libMyJNILibrary.so”的“MyJNILibrary.c”代码中调用它。

我尝试按如下方式更改Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c

LOCAL_LDLIBS += -lotherso

include $(BUILD_SHARED_LIBRARY) 

但是当我在这上面调用ndk-build时,我发现-lotherso会出错。我在哪里放“libotherso.so”文件,以便ndk-build可以拿起它?

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:5)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := otherso
LOCAL_SRC_FILES := ../lib/libotherso.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c
LOCAL_SHARED_LIBRARIES := otherso
include $(BUILD_SHARED_LIBRARY) 

请注意,LOCAL_SRC_FILES是相对于您的LOCAL_PATH。

不要忘记在自己的JNI库之前加载依赖项:

static {
  System.loadLibrary("otherso");
  System.loadLibrary("MyJNILibrary");
}