做了两个动态链接库,一个是testpointer.so,另一个是test.so。在test.so里使用
然后成功生成了testpointer.so和test.so。
启发了我,我根本就没有加载 loaded 另一个.so文件啊。。
LOCAL_SHARED_LIBRARIES := testpointer
调用libtestpointer.so
Android.mk文件如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testpointer
LOCAL_SRC_FILES := testpointer.c
LOCAL_EXPORT_CFLAGS := -DTESTPOINTER=1
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.c
LOCAL_CFLAGS := -DTEST=2
LOCAL_SHARED_LIBRARIES := testpointer
LOCAL_LDLIBS := -ldl -llog
include $(BUILD_SHARED_LIBRARY)
然后成功生成了testpointer.so和test.so。
然后 在java代码里写了
static {
System.loadLibrary("test");
}
运行是却出现了错误,告诉我test.so不能找到testpointer.so。。。
回去翻doc 在SYSTEM-ISSUES.那一篇的最后一条
- A bug prevents one application shared library from depending on another one. For example, if you build both libfoo.so and libbar.so for your application, and list libfoo.so as a dependency for libbar.so in bar/Android.mk (with LOCAL_SHARED_LIBRARIES := foo), then loading libbar.so will always fail, even if you have already loaded libfoo.so in your process.
于是在java代码里修改如下
static { System.loadLibrary("testpointer"); System.loadLibrary("test"); }
于是 问题 搞定 。