0

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

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

我尝试按如下方式更改我的 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 可以获取它?

感谢您的任何帮助,您可以提供。

4

1 回答 1

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");
}
于 2013-01-17T09:25:46.507 回答