3
  1. 我正在构建一个混合模式的Android项目,该项目使用的是原生ffmpeg
  2. 库是
    2.1。libavutil.so -> libavutil.so.51
    2.2。libavcodec.so -> libavcodec.so.54
    2.3。libavformat.so -> libavformat.so.54
  3. 我的 Java 代码包括以下 JNI 部分来加载本机库:
    static {
         System.loadLibrary("avutil");
         System.loadLibrary("avcodec");
         System.loadLibrary("avformat");
    }
  4. 'libavcodec.so' 依赖于 'libavutil.so.51' 而不是 'libavutil.so'。
  5. 运行我的活动时  System.loadLibrary("avcodec"); 除了“无法为'libavcodec.so'加载所需的库'libavutil.so.51'(找不到库'libavutil.so.51')”
  6. 在我的 Android.mk 上,我有以下部分将本机库添加到 APK:

    include $(CLEAR_VARS)
    LOCAL_MODULE := mylib
    LOCAL_SRC_FILES := ../../../mylib/libmylib.so
    include $(PREBUILT_SHARED_LIBRARY )

  7. 用 libmylib.so.%some number% 替换 libmylib.so 会导致构建失败,并显示 [LOCAL_SRC_FILES 应指向以“.so”结尾的文件]


    考虑到上述情况,我如何才能在没有依赖项的情况下加载 libavcodec问题 ?
    • 我可以修复 libavcodec.so 依赖项以指向 libavutil.so 而不是 libavutil.so.51 吗?
    • 我可以更改 Android.mk 以便能够打包 libavutil.so.51(非 .SO 扩展名)吗?然后它可以使用'System.loadLibrary'加载吗?

      任何帮助将不胜感激!!!

      索芬的纳达夫
4

1 回答 1

0

解决方法是简单地使用静态库而不是动态库,但是,这是一种临时解决方法,因为由于 LGPL 限制,SharedLibs 对于商业用途是强制性的。

于 2012-04-22T10:15:18.840 回答