我有一个程序,我创建可执行文件时将多个库链接在一起。我已经使用独立工具链构建了所有这些库,并使用了独立工具链,我可以创建一个可在Android设备上运行的可执行文件。所以,看起来我建立的图书馆是功能性的。现在我正试图将这些库合并到一个应用程序中。所以,在我android.mk我有这样的事情:当预构建静态和共享库与Android NDK时链接问题
LOCAL_PATH := $(call my-dir)
ROOT_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_PATH = $(ROOT_PATH)
LOCAL_MODULE := test-libs
LOCAL_STATIC_LIBRARIES := staticA
LOCAL_SHARED_LIBRARIES := sharedA sharedB sharedC sharedD
LOCAL_SRC_FILES := test-libs.c
include $(BUILD_SHARED_LIBRARY)
对于每个库,我有一个Android.mk这样
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sharedA
LOCAL_SRC_FILES := libsharedA.so
include $(PREBUILT_SHARED_LIBRARY)
静态库和一个共享库对任何东西都没有依赖性,如果我只包含它们,都很酷。一个共享的预构建库仅依赖于静态预构建库,其他依赖于预建静态库和其他预构建共享库。
的问题是,如果我加载任何依赖于通过的System.loadLibrary(静态库),我得到的有用信息:
Unable to dlopen(libsharedA.so) Cannot load library: link_image
通过这一这里挖掘和下面的建议有关如何使用strace的:
http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html
我发现,共享库被加载时,它们无法找到一个函数,在我的静态库。
那么,我该如何正确使用一个预建的共享库,它的使用依赖于预建的静态库,而不是这个问题呢?
您是否曾尝试在加载依赖该静态库之前加载静态库? – zapl 2012-03-20 00:57:15
如何?我认为System.loadLibrary()仅适用于共享库。我认为自动处理静态库的方式不同。我可以尝试明天使用loadLibrary,但我认为这不起作用。 – corbin 2012-03-20 05:13:23
这只是一个猜测 - 我不知道这是否真的有效。我一直在想,你需要将库加载到某种类型的java上下文中,以便另一个人知道在哪里查找以解决缺失的问题。 – zapl 2012-03-20 08:28:13