Ita*_*Ita 12 android shared-libraries android-ndk
我正在尝试创建一个链接到另一个共享库的共享库.
这是我的主要模块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)
Run Code Online (Sandbox Code Playgroud)
我还有./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)
Run Code Online (Sandbox Code Playgroud)
SightCore-jni.cpp源文件是共享库的jni接口,使用该命令加载
System.loadLibrary("SightCore-jni");
Run Code Online (Sandbox Code Playgroud)
在ndk-build过程中,我没有得到编译或链接错误.当我尝试运行应用程序并访问其中一个本机方法时,我得到了UnsatsfiedLinkError.我注意到如果在我的jni代码中禁用对SightAPI的引用并将拼写错误输入LOCAL_STATIC_LIBRARIES:= SightAPI行,则构建成功并且没有UnsatisfiedLinkError.
这意味着我拥有的jni代码很好(我确实它确定没问题......)
所以观察结果如下:
如果我用预构建的共享库编译共享库,我会得到一个损坏的 .so文件.
如果我编译相同的ndk项目而不链接到预构建的共享库,那么从java端加载共享库没有问题.
如果可以,请帮帮我.
提前致谢,
伊达
Ita*_*Ita 13
发现了这个问题.
显然,ndk构建系统不会自动加载引用的共享库,即使它们是在Android.mk中声明的.
我不得不打电话System.loadLibrary(SightAPI) & System.loadLibrary("SightCore-jni") 来解决这个问题.我本以为要加载的唯一库就是主库SightCore-jni.
嗯..我猜道德是如果你想要完成的事情,自己动手:)
+1罗伊塞缪尔的努力和正确的直觉.
我希望这可以帮助任何人.
干杯
| 归档时间: |
|
| 查看次数: |
14137 次 |
| 最近记录: |