在android上构建vp8

在android上构建vp8,android,vp8,Android,Vp8,我正在尝试为Android构建vp8编解码器。我使用sourcery g++运行了configure.sh脚本和armv6的makefile,成功地生成了libvpx.so。之后,我编写了一个JNI包装器,并成功地用ndk build编译了它。当我在姜饼智能手机上运行此程序时,出现了一个不满意的链接错误“libpthread.so.0未找到”。如何消除此错误?共享库中的SONAME有时会出现问题,请参阅本文 如果不需要pthread,可以禁用它们 Iv'e过去在.so文件方面存在问题,并且通过

我正在尝试为Android构建vp8编解码器。我使用sourcery g++运行了configure.sh脚本和armv6的makefile,成功地生成了libvpx.so。之后,我编写了一个JNI包装器,并成功地用ndk build编译了它。当我在姜饼智能手机上运行此程序时,出现了一个不满意的链接错误“libpthread.so.0未找到”。如何消除此错误?

共享库中的SONAME有时会出现问题,请参阅本文

如果不需要pthread,可以禁用它们

Iv'e过去在.so文件方面存在问题,并且通过使用.a静态库而不是.so共享库来避免所有这些问题,并对可读性进行了一些调整

  • 创建{project}/jni文件夹

  • 获取JNI绑定

    int[] major = new int[2];
    int[] minor = new int[2];
    int[] build = new int[2];
    int[] revision = new int[2];
    MkvMuxer.getVersion(major, minor, build, revision);
    String outStr = "libwebm:" +
                    Integer.toString(major[0]) + "." +
                    Integer.toString(minor[0]) + "." +
                    Integer.toString(build[0]) + "." +
                    Integer.toString(revision[0]);
    System.out.println(outStr);
    
    git克隆

  • 获取libvpx

    git克隆

  • 为Android配置libvpx

    ./libvpx/configure--target=armv7 android gcc--disable examples--sdk path={NDK路径}

    --sdk路径
    必须是绝对路径

  • 获取libwebm

    cd绑定/JNI

    git克隆

  • 去拿libogg

    从下载ogg代码

    提取到bindings/JNI

  • 我们需要运行configure来生成config_types.h

    cd libogg-1.3.0&&&./configure&&cd

  • 得到libvorbis

    从下载vorbis代码

    提取到bindings/JNI

  • 抓住利比乌夫

    svn签出libyuv只读

  • 使用以下数据创建{project}/jni/Application.mk:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
    WORKING_DIR := $(call my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI
    include $(BINDINGS_DIR)/Android.mk
    
  • 使用以下数据创建{project}/jni/Android.mk:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
    WORKING_DIR := $(call my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI
    include $(BINDINGS_DIR)/Android.mk
    
  • 构建JNI代码

    {NDK路径}/NDK生成

  • 复制java代码

    cp-R绑定/JNI/com/google../src/com/

  • 添加代码以测试绑定

    int[] major = new int[2];
    int[] minor = new int[2];
    int[] build = new int[2];
    int[] revision = new int[2];
    MkvMuxer.getVersion(major, minor, build, revision);
    String outStr = "libwebm:" +
                    Integer.toString(major[0]) + "." +
                    Integer.toString(minor[0]) + "." +
                    Integer.toString(build[0]) + "." +
                    Integer.toString(revision[0]);
    System.out.println(outStr);
    
  • 运行应用程序。您应该看到libwebm版本输出

  • 根据需要调整。VP8包装器位于com.google.libvpx命名空间中


  • 妙极了!但是-当我在执行以下操作时,在配置过程中总是会出错。它无法实例化编译器。下面是日志:无法调用编译器:/Users/yosef/Desktop/adt/ndk/toolschains/arm-linux-androideabi-4.9/prebuild/darwin-x86_64/bin/arm-linux-androideabi-gcc--sysroot=/Users/yosef/Desktop/adt/ndk/sources/android/libportable/arch arm-I/Users/yosef/Desktop/adt/ndk/sources/android/cpufeatures-mtune=cortex-a8-O3-fPIC-W。。你知道原因是什么吗?回购协议已经转移到其他地方了。请更新回购链接以从新根目录获取-