我刚接触过Android,目前正在尝试为Android (以及后来的iOS)构建一个RTMP C客户机。目前,我遇到了一个问题,当我试图加载库时,应用程序就会崩溃:
static {
System.loadLibrary("test");
}我得到的例外是
java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "librtmp.so.1" needed by "libtest.so"; caused by library "librtmp.so.1" not found我真的完全迷路了。ndk-build不返回任何错误:
[armeabi] Prebuilt : rtmp.so <= jni/rtmp/
[armeabi] Install : rtmp.so => libs/armeabi/rtmp.so
[armeabi] Compile thumb : test <= RTMPClient.c
[armeabi] SharedLibrary : libtest.so
[armeabi] Install : libtest.so => libs/armeabi/libtest.so我尝试过通过System.loadLibrary("rtmp")加载rtmp库,但没有骰子。
Android.mk
LOCAL_PATH:= $(call my-dir)
LIBS_PATH := libs/$(TARGET_ARCH_ABI)
include $(CLEAR_VARS)
LOCAL_MODULE := rtmp
LOCAL_SRC_FILES := rtmp/rtmp.so
LOCAL_C_INCLUDES := rtmp/
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := RTMPClient.c
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES += rtmp
include $(BUILD_SHARED_LIBRARY)Application.mk
APP_PLATFORM:=android-19我的RTMPClient.c使用了来自rtmp的一些结构和函数,如下所示:
#include <rtmp/rtmp.h>
我不知道librtmp.so.1是从哪里来的,但我也在我的libtest.so中找到了它,它是用arm-linux-和andrioideabi自己编写的:
0x00000001 (NEEDED) Shared library: [librtmp.so.1]我有什么办法解决这个问题吗?
编辑:我从rtmp.so获得了这里文件。我是从KODI图书馆员更新页面派来的
发布于 2015-12-04 00:22:15
最后,我抛出了我的rtmp.so文件,而从rtmpdump-android抓取了jni文件。放入这些文件后,将我的android.mk文件更改为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES += \
librtmp/amf.c \
librtmp/hashswf.c \
librtmp/log.c \
librtmp/parseurl.c \
librtmp/rtmp.c
LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROS -DNO_CRYPTO
LOCAL_LDLIBS := -llog
LOCAL_MODULE := librtmp
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := dump
LOCAL_CFLAGS := -DRTMPDUMP_VERSION=\"v2.4\"
LOCAL_LDLIBS := -llog
LOCAL_SRC_FILES := dump/rtmpdump.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../librtmp
LOCAL_C_INCLUDES += dump/rtmpdump.h
LOCAL_STATIC_LIBRARIES := librtmp
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := nelly.c nelly_tables.c RTMPClient.c
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES += dump
include $(BUILD_SHARED_LIBRARY)并将RTMPClient.c文件更改为包含#include "librtmp/rtmp.h"而不是#include <rtmp/rtmp.h>,该文件编译后在我的设备上运行,没有任何问题。
https://stackoverflow.com/questions/34078524
复制相似问题