【问题标题】:SharedLib dependency @ Mixed mode APKSharedLib 依赖@混合模式 APK
【发布时间】:2012-04-20 13:35:30
【问题描述】:
  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 部分以加载本机库:
    静态{
    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:

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

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


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

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

      索芬的纳达夫

【问题讨论】:

    标签: android ffmpeg android-ndk


    【解决方案1】:

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

    【讨论】:

    • 找到真正的解决方案了吗?由于 LGPL,我在同一个洞里面临同样的限制。
    • 好的,我终于找到了解决这个问题的方法,方法是更改​​ ffmpeg 发行版中的 Makefile 以生成不带版本后缀的库。所以我有真正的 libavutil.so、libavcodec.so、libswscale.so,所有这些都在我的 nexus 4 上工作!
    • 嗨购买,我在使用最新的FFMPEG时遇到同样的问题,你的观点非常有用,但由于我不知道如何更改,我没有做过,你能帮我指出怎么改?
    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2018-11-04
    • 2012-03-20
    相关资源
    最近更新 更多