首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有.So库的Android /JNI.So

带有.So库的Android /JNI.So
EN

Stack Overflow用户
提问于 2015-12-03 23:53:27
回答 1查看 436关注 0票数 1

我刚接触过Android,目前正在尝试为Android (以及后来的iOS)构建一个RTMP C客户机。目前,我遇到了一个问题,当我试图加载库时,应用程序就会崩溃:

代码语言:javascript
运行
复制
static {
    System.loadLibrary("test");
}

我得到的例外是

代码语言:javascript
运行
复制
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不返回任何错误:

代码语言:javascript
运行
复制
[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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
APP_PLATFORM:=android-19

我的RTMPClient.c使用了来自rtmp的一些结构和函数,如下所示:

#include <rtmp/rtmp.h>

我不知道librtmp.so.1是从哪里来的,但我也在我的libtest.so中找到了它,它是用arm-linux-和andrioideabi自己编写的:

代码语言:javascript
运行
复制
0x00000001 (NEEDED)                     Shared library: [librtmp.so.1]

我有什么办法解决这个问题吗?

编辑:我从rtmp.so获得了这里文件。我是从KODI图书馆员更新页面派来的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-04 00:22:15

最后,我抛出了我的rtmp.so文件,而从rtmpdump-android抓取了jni文件。放入这些文件后,将我的android.mk文件更改为:

代码语言:javascript
运行
复制
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>,该文件编译后在我的设备上运行,没有任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34078524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档