无法加载库:reloc_library [1306]:249无法找到' atof' ...在Android中加载avformat.so时

时间:2016-11-03 01:03:31

标签: android ffmpeg

我正在使用Android Studio 2.2并尝试将ffmpeg库链接到Android 4.1.2设备上运行。加载avformat库时,我收到错误

"cannot load library: reloc_library[1306]: 249 cannot locate 'atof'..."

以下链接指出,如果使用SDK版本21及更高版本构建应用,则在使用旧版Android(SDK版本< 19)的设备上运行时会出现此问题。

Cannot load library: reloc_library[1285]: cannot locate 'rand'

我在build.gradle中将targetSdkVersion更改为19,并使用" android-16"构建了ffmpeg库。目标,仍然得到错误。

我想知道是否有人有类似的问题,并找到了一种方法使其工作。感谢。

1 个答案:

答案 0 :(得分:0)

我认为我得到它的工作或至少让我的问题解决。问题是由于两件事:

1)ffmpeg库是用" android-23"构建的。

2)Android Studio没有将ffmpeg库打包到APK。

以下是我的工作原理。

  • 使用" android-19"构建ffmpeg库(或从其他链接建议更低)。顺便说一下,targetSdkVersion不必是< 21.对我来说,它仍然适用于23。

  • 按照我正在使用的这些库的特定顺序调用System.loadlibrary("")。

    的System.loadLibrary(" avutil-55&#34);

    的System.loadLibrary(" swscale-4&#34);

    的System.loadLibrary(" avcodec中-57&#34);

    的System.loadLibrary(" avfilter-6&#34);

    的System.loadLibrary(" avformat-57&#34);

    的System.loadLibrary(" avdevice-57&#34);

让我失望的是,前四行执行得很好。第五次通话时出现错误。我不明白为什么。

无论如何,这就是我在CMakeLists.txt中为ffmpeg库所拥有的。

    # Sub-libraries ffmpeg
    add_library( avcodec-57 SHARED IMPORTED )
    add_library( avdevice-57 SHARED IMPORTED )
    add_library( avfilter-6 SHARED IMPORTED )
    add_library( avformat-57 SHARED IMPORTED )
    add_library( avutil-55 SHARED IMPORTED )
    add_library( swscale-4 SHARED IMPORTED )

    set_target_properties( avcodec-57
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libavcodec-57.so
                            )
    set_target_properties(  avdevice-57
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libavdevice-57.so
                            )
    set_target_properties( avfilter-6
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libavfilter-6.so
                            )
    set_target_properties( avformat-57
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libavformat-57.so
                            )
    set_target_properties( avutil-55
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libavutil-55.so
                            )
    set_target_properties( swscale-4
                            PROPERTIES IMPORTED_LOCATION
                            ../../../../libs/${ANDROID_ABI}/lib/libswscale-4.so
                            )

    # Specifies a path to native header files.
    include_directories(
                        libs/${ANDROID_ABI}/include
                        )

target_link_libraries( # Specifies the target library.
                       native-libcore

                       # Links the target library to the log library
                       # included in the NDK.
                       avcodec-57 avdevice-57 avfilter-6 avformat-57 avutil-55 swscale-4
                       ${log-lib}
                        )
  • 最后,因为Android Studio 2.2没有打包库,所以我手动将库复制到项目.. \ build \ intermediates \ cmake \ debug \ obj \ folder。在刷新CMakeLists.txt之前,此文件夹不存在(执行项目同步)。当应用程序运行时,库将被复制到apk。