【发布时间】:2011-07-15 01:29:58
【问题描述】:
我正在尝试创建一个链接到另一个共享库的共享库。
这是我的主模块 Android.mk:
TOP_LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH := $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_CPP_EXTENSION := cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib/include
LOCAL_MODULE := SightCore-jni
LOCAL_SRC_FILES := SightDemo.cpp SightCore-jni.cpp
LOCAL_SHARED_LIBRARIES := SightAPI
LOCAL_LDLIBS = -llog
include $(BUILD_SHARED_LIBRARY)
我在 ./lib 目录中也有预构建的共享库,它有自己的 Android.mk 文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := SightAPI
LOCAL_SRC_FILES := libSightAPI.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
SightCore-jni.cpp源文件是共享库的jni接口,使用命令加载
System.loadLibrary("SightCore-jni");
在 ndk-build 过程中,我得到没有编译或链接错误。
当我尝试运行应用程序并访问其中一种本机方法时,我得到了 UnsatsfiedLinkError。
我注意到,如果在我的 jni 代码中禁用对 SightAPI 的引用并在 LOCAL_STATIC_LIBRARIES := SightAPI 行中输入错字,则构建成功并且没有 UnsatisfiedLinkError。
这意味着我拥有的jni代码是好的(我实际上确定它是好的......)
所以观察如下:
如果我用预建的共享库编译共享库,我会得到一个损坏的 .so 文件。
如果我编译相同的 ndk 项目没有链接到预建的共享库,则 没问题 从 java 端加载共享库。
如果可以的话,请帮帮我。
提前致谢,
意大利
【问题讨论】:
-
您在 logcat 中看到什么错误消息?应该是 UnsatisfiedLinkError 异常上方的消息,可能带有 dlopen() 的输出。另外,您使用的是什么版本的 Android?
-
如何将我的共享库链接到 Android NDK 项目你能解释一下吗
标签: android shared-libraries android-ndk