在 Android 上构建 vp8

发布于 2024-12-08 07:08:31 字数 225 浏览 0 评论 0原文

我正在尝试为 Android 构建 vp8 编解码器。我使用sourcery g++运行了configure.sh脚本和armv6的makefile,成功生成了libvpx.so。之后我编写了一个 JNI 包装器并使用 ndk-build 成功编译了它。当我在 Gingerbread 智能手机上运行此程序时,出现 UnsatisfiedLinkError“libpthread.so.0 not found”。我怎样才能摆脱这个错误?

I'm trying to build the vp8 codec for Android. I ran the configure.sh script and the makefile for armv6 with sourcery g++ which succesfully produced libvpx.so. After that I wrote a JNI wrapper and compiled it with ndk-build succesfully. When I run this on a Gingerbread smartphone I got a UnsatisfiedLinkError "libpthread.so.0 not found". How can I get rid of this error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海夕 2024-12-15 07:08:31

来自 http://git .chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android 进行了一些可读性调整。

  1. 创建 {project}/jni 文件夹。

  2. 获取 JNI 绑定。

    <块引用>

    git克隆https://chromium.googlesource.com/webm/bindings

  3. 获取 libvpx。

    <块引用>

    git克隆https://chromium.googlesource.com/webm/libvpx

  4. 配置 libvpx安卓

    <块引用>

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

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

  5. 获取 libwebm。

    <块引用>

    cd 绑定/JNI

    git克隆https://chromium.googlesource.com/webm/libwebm

    获取libwebm

  6. 获取利博格。

    <块引用>

    http://downloads.xiph 下载 ogg 代码。 org/releases/ogg/libogg-1.3.0.tar.gz

    提取到绑定/JNI。

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

    <块引用>

    cd libogg-1.3.0 && ./配置&&光盘..

  8. 获取 libvorbis

    <块引用>

    http://downloads.xiph 下载 vorbis 代码。 org/releases/vorbis/libvorbis-1.3.3.tar.gz

    提取到绑定/JNI。

    libvorbis

  9. 获取libyuv

    <块引用>

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv -只读

    libyuv

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

    APP_ABI := armeabi-v7a
    APP_OPTIM := 发布
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
  11. 使用以下数据创建 {project}/jni/Android.mk:

    WORKING_DIR := $(调用 my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/绑定/JNI
    包括 $(BINDINGS_DIR)/Android.mk
    
  12. 构建 JNI 代码。

    <块引用>

    {NDK 路径}/ndk-build

  13. 复制 java 代码。

    <块引用>

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

  14. 添加代码以测试绑定。

    int[] Major = new int[2];
    int[] 小数 = 新 int[2];
    int[] 构建 = 新 int[2];
    int[] 修订版 = 新 int[2];
    MkvMuxer.getVersion(主要、次要、构建、修订);
    字符串 outStr = "libwebm:" +
                    Integer.toString(major[0]) + "." +
                    Integer.toString(minor[0]) + "." +
                    Integer.toString(build[0]) + "." +
                    Integer.toString(修订版[0]);
    System.out.println(outStr);
    
  15. 运行应用程序。您应该看到 libwebm 版本输出。

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

From http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android with some adjustments for readability.

  1. Create {project}/jni folder.

  2. Get JNI bindings.

    git clone https://chromium.googlesource.com/webm/bindings

  3. Get libvpx.

    git clone https://chromium.googlesource.com/webm/libvpx

  4. Configure libvpx for Android

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

    --sdk-path MUST be absolute.

  5. Get libwebm.

    cd bindings/JNI

    git clone https://chromium.googlesource.com/webm/libwebm

  6. Get libogg.

    Download ogg code from http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz

    Extract to bindings/JNI.

  7. We need to run configure to generate config_types.h.

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

  8. Get libvorbis

    Download vorbis code from http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz

    Extract to bindings/JNI.

  9. Get libyuv

    svn checkout http://libyuv.googlecode.com/svn/trunk/ libyuv-read-only

  10. Create {project}/jni/Application.mk with the data below:

    APP_ABI := armeabi-v7a
    APP_OPTIM := release
    APP_STL := gnustl_static
    APP_CPPFLAGS := -frtti
    
  11. Create {project}/jni/Android.mk with the data below:

    WORKING_DIR := $(call my-dir)
    BINDINGS_DIR := $(WORKING_DIR)/bindings/JNI
    include $(BINDINGS_DIR)/Android.mk
    
  12. Build the JNI code.

    {path to NDK}/ndk-build

  13. Copy the java code.

    cp -R bindings/JNI/com/google ../src/com/

  14. Add code to test the bindings.

    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);
    
  15. Run the app. You should see libwebm version output.

  16. Tweak as needed. VP8 wrappers are in the com.google.libvpx namespace.

相思故 2024-12-15 07:08:31

有时这可能是共享库中 SONAME 的问题,请查看这篇文章。

http://groups.google.com/group/android-ndk/browse_thread /thread/fd484da512650359

如果您并不真正需要它们,您可以禁用它们。

我过去遇到过 .so 文件的问题,并且通过使用 .a 静态库而不是 .so 共享库避免了所有这些问题

This can sometimes be a problem with the SONAME in a shared library, have a look at this article.

http://groups.google.com/group/android-ndk/browse_thread/thread/fd484da512650359

You could disable pthreads if you don't really need them.

Iv'e had problems with .so files in the past and have avoided all of these problems by using .a static libraries instead of .so shared libraries

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文