jniのc++ scrファイルに.soライブラリをロードしたい。
lib_H264_dec_arm11_elinux.so を SunnyWell.cpp にロードします。
dl_handle = dlopen("libcoder/lib_H264_dec_arm11_elinux.so", RTLD_LAZY);
Jni ファイルは libMediaConfig.so にコンパイルされ、Android.mk は次のようになります。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MediaConfig
LOCAL_SRC_FILES := MediaConfig.cpp \
SunniWell.cpp \
hwcodec.cpp
LOCAL_C_INCLUDES:= ${LOCAL_PATH}/jni \
${LOCAL_PATH}/jni/hwcodec.h \
${LOCAL_PATH}/jni/SunniWell.h
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog
LOCAL_SHARED_LIBRARIES:= ${LOCAL_PATH}/jni/libcoder/lib_H264_dec_arm11_elinux
include $(BUILD_SHARED_LIBRARY)
Java はメディア config.so をロードします。
static {
System.loadLibrary("MediaConfig");
}
しかし、私はエラーが発生します:
D/dalvikvm(9467): Trying to load lib /data/data/com.qiyi.mediaconfig/lib/libMediaConfig.so 0x4115e318
D/dalvikvm(9467): Added shared lib /data/data/com.qiyi.mediaconfig/lib/libMediaConfig.so 0x4115e318
D/dalvikvm(9467): No JNI_OnLoad found in /data/data/com.qiyi.mediaconfig/lib/libMediaConfig.so 0x4115e318, skipping init
A/libc(9467): Fatal signal 11 (SIGSEGV) at 0x400d54a8 (code=2)
cppファイルにlib_H264_dec_arm11_elinux.soをロードしているためだと思います。ロード中の lib_H264_dec_arm11_elinux.so を削除すると、エラーは発生しません。しかし、ライブラリを正常にロードする方法がわかりませんか?
どうもありがとう!