我有一个android项目,我使用本机代码来处理SIP(使用libosip2和libeXosip2).我的本机代码与库的源一起编译到一个模块中.
代码编译得很好,生成的库具有我期望它拥有的所有符号,但是当我尝试加载生成的库时,我收到以下错误:
E/eXosip.loadLibrary(9210): java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1307]: 1941 cannot locate 'srand'...
我的Application.mk看起来像这样:
APP_STL := gnustl_shared APP_ABI := armeabi-v7a APP_CPPFLAGS += -fexceptions
我确实使用ndk-depends检查了未捕获的依赖项,这给了我
libeXosip_jni.so libstdc++.so liblog.so libgnustl_shared.so libm.so libdl.so libc.so
添加loadLibrary("gnustl_shared")没有帮助(这是在"libs/armeabi-v7 /"中也找到的唯一一个提到的库).
我的Android.mk:
LOCAL_PATH := $(call my-dir) $(shell (cd $(LOCAL_PATH); sh extract_stuff.sh; cd $(OLDPWD))) include $(CLEAR_VARS) OSIP := libosip2-4.1.0 EXOSIP := libeXosip2-4.1.0 LOCAL_MODULE := eXosip LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(OSIP)/include \ $(LOCAL_PATH)/$(EXOSIP)/include LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(OSIP)/src/osipparser2/*.c)) \ $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(OSIP)/src/osip2/*.c)) \ $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/$(EXOSIP)/src/*.c)) LOCAL_CFLAGS += -DHAVE_FCNTL_H \ -DHAVE_SYS_TIME_H \ -DHAVE_STRUCT_TIMEVAL \ -DHAVE_SYS_SELECT_H \ -DHAVE_PTHREAD \ -DHAVE_SEMAPHORE_H \ -DENABLE_TRACE \ -DOSIP_MT include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := eXosip_jni LOCAL_STATIC_LIBRARIES := eXosip LOCAL_LDLIBS := -llog LOCAL_C_INCLUDES := BackendData.h \ $(LOCAL_PATH)/$(EXOSIP)/include \ $(LOCAL_PATH)/$(OSIP)/include LOCAL_SRC_FILES := eXosip.cpp \ eXosipCall.cpp include $(BUILD_SHARED_LIBRARY)
C/C++不是我的坚韧,所以如果有人能够启发我,我会非常感激:)作为替代方案,解决我的问题也会很好^^
更新1
我将eXosip/osip库与我的代码分开,将其编译成静态库.我还测试了创建一个共享库并从Java内部手动加载它,它失败并出现相同的错误消息.
更新2
我尝试使用gnustl_shared,static和stlport - 错误仍然存在.