2011-08-29 73 views
2

目前在我的程序中有很多共享库* .so,但似乎NDK只支持jni使用的主共享库。如何在android ndk中添加多个共享库?

示例:Java应用程序将使用库A.so,而A.so对B有依赖关系当我将B和C构建到静态库时,然后在LOCAL_STATIC_LIBRARIES的A.so中使用它们,该应用程序运行良好。 当我将B和C构建到共享库时,然后在LOCAL_SHARED_LIBRARIES的A.so中使用它们,并通过System.loadLibrary(“...”)加载它们中的每一个,该应用程序将在启动时崩溃。

我想使用所有其他库作为共享库,以便我可以保持我的应用程序的灵活性,我怎么能在android中正确使用多个共享库?

附加我Android.mk代码:

DEPENDENCE_LIBS := gthread-2.0 gmodule-2.0 gobject-2.0 glib-2.0 

ifeq ($(BUILD_STATIC),true) 
    LOCAL_STATIC_LIBRARIES := $(DEPENDENCE_LIBS) 
else 
    LOCAL_SHARED_LIBRARIES := $(DEPENDENCE_LIBS) 
endif 

include $(BUILD_SHARED_LIBRARY) 

如果定义BUILD_STATIC真正,一切运作良好,但如果我定义BUILD_STATIC,能不工作

回答

1

其实我原来的方式是正确的,我只是在图书馆名称拼写错误。 现在,当我将BUILD_STATIC定义为false,并使用System.loadLibrary(“lib-name”)加载每个共享库时,整个过程都能正常工作。

0

我不认为System.loadLibrary链接B.so或C.so到A.所以。它意味着加载你将通过JNI调用的主库。

如果A.so链接到B.so和C.so时,它是否工作?我在想系统应该知道自动链接它们。如果没有,请尝试使用uselib系统调用。

+0

即使我通过链接B.so和C.so构建A.so(使用LOCAL_SHARED_LIBRARIES:= $(DEPENDENCE_LIBS)),它也不能工作。顺便说一句,我不能让uselib(...)工作作为参考 – Hyden

+0

uselib不存在于Android或它只是不工作?如果它不存在,那么A.so在尝试构建它时不会链接。如果它作为Android Linux系统调用存在,也许你只是没有正确调用它。 –

+0

uselib在Android中不存在,建筑物无法通过 – Hyden

相关问题