1

I want to load a .so library in c++ scr file in jni.

I want to load lib_H264_dec_arm11_elinux.so in the SunniWell.cpp:

dl_handle = dlopen("libcoder/lib_H264_dec_arm11_elinux.so", RTLD_LAZY);

Jni files will be compiled to libMediaConfig.so and the Android.mk is:

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)

and the java load the media config.so:

static {
    System.loadLibrary("MediaConfig");
}

But I get the error:

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)

I am sure that it because of loading lib_H264_dec_arm11_elinux.so in cpp file. if I remove the loading lib_H264_dec_arm11_elinux.so, I get no error. But I don't know how to load the library successfully?

Thanks very much!

Hilda
  • 45
  • 1
  • 7
  • You can try to handle dlopen error so that we will have a clearer idea on what the error might be. Segmentation fault does not tell much about what's going on. Like, http://stackoverflow.com/questions/16961705/dlopen-invalid-argument-when-loading-native-activity – eozgonul Sep 13 '13 at 09:23
  • 1
    I find the .so is 32bit, but my system is 64bit. Thanks! – Hilda Sep 22 '13 at 10:12

0 Answers0