Android NDK Linking shared library unsatisfied Linker Error

标签 android android-ndk ffmpeg

我有个问题,

下面是Android.mk

LOCAL_PATH := $(call my-dir)
INITIAL_PATH := $(LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_MODULE := ffmpegbuilt
LOCAL_SRC_FILES := libffmpeg.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/
include $(PREBUILT_SHARED_LIBRARY)


LOCAL_PATH := $(INITIAL_PATH)
LOCAL_MODULE    := main_module
LOCAL_ARM_MODE := arm  # remove this if you want thumb mode
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := ffmpegbuilt
include $(BUILD_SHARED_LIBRARY)

它按预期创建了两个 shared_libraries。我在 libs/armeabi 中看到了这两个库文件夹
当我运行应用程序时,出现 Unsatisfied Linker 错误
01-06 20:21:38.281: E/AndroidRuntime(435): FATAL EXCEPTION: main
01-06 20:21:38.281: E/AndroidRuntime(435): java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1962]:    32 could not load needed library 'libffmpeg.so' for 'libmain_module.so' (load_library[1104]: Library 'libffmpeg.so' not found)
01-06 20:21:38.281: E/AndroidRuntime(435):  at java.lang.Runtime.loadLibrary(Runtime.java:434)
01-06 20:21:38.281: E/AndroidRuntime(435):  at java.lang.System.loadLibrary(System.java:554)

可能是什么问题,尽管我定义了 LOCAL_MODULE := ffmpegbuilt ,为什么预建库的模块名称没有改变?

最佳答案

让我们从第二个问题开始。不,LOCAL_MODULE 的名字对于预建库不会更改文件的名称。这就是它的设计方式。是的,这个名称对构建的静态库和共享库的影响要大得多。但是重建的不遵循相同的模式。

现在回答你的第一个问题。 Android 不会在本地应用程序的 中查找动态依赖项库 目录。有一些技术原因,甚至有一些解决方法。但通常,我们只是简单地 loadLibrary Java中的本地共享库,保持正确的顺序,以便在每一步都解决外部依赖关系。

在您的情况下,此讨论解决为

System.loadLibrary("ffmpeg");
System.loadLibrary("main_module");

关于Android NDK Linking shared library unsatisfied Linker Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952608/

相关文章:

android - 如何像谷歌地图应用程序一样将谷歌标志移动到透明操作栏上方?安卓

android -/system/bin/linker 中的段错误与为 Android 编译的二进制文件

ffmpeg - 使用ffmpeg从m4v文件中提取图片

android - 抽屉导航内项目的字体大小没有改变

android - 在 Kotlin 中切换可见性,isVisible Unresolved 引用

c - Boehm GC android sigsegv on load_gc

android - 使用 Android FFmpeg 时播放视频缓慢且滞后

php - 如何使用 xampp 安装 ffmpeg

c++ - 如何直接使用ffmpeg将H264原始流写入mp4

java - ObjectInputStream 拖拽程序