• Ubuntu 32下Android NDK+NEON的配置过程及简单使用举例


    1、  利用VMware在Windows7 64位下安装Ubuntu13.10 32位虚拟机;

    2、  从 https://developer.android.com/tools/sdk/ndk/index.html下载android-ndk32-r10-linux-x86.tar.bz2

    3、  将android-ndk32-r10-linux-x86.tar.bz2复制到Ubuntu的/home/spring/NEON目录下,并解压缩;

    4、  配置环境变量:在终端输入 sudovi /etc/profile , 打开profile文件,在此文件最后加上:

    export NDKROOT=/home/spring/NEON/android-ndk-r10 (注意:绝对路径)

    export PATH=$NDKROOT:$PATH

    5、  保存profile文件,重新启动Ubuntu;

    6、  输入 echo $PATH,会有/home/spring/NEON/android-ndk-r10 ;

    7、  输入 ndk-build,显示AndroidNDK 等相关信息,说明配置NDK成功;

    8、  安装arm-linux-gcc(基于arm架构的linux平台交叉编译工具):从http://www.arm9.net/download.asp 下载arm-linux-gcc-4.4.3-20100728.tar.gz

    9、  将arm-linux-gcc-4.4.3-20100728.tar.gz复制到Ubuntu的/home/spring/NEON目录下,并解压缩;tarxvzf arm-linux-gcc-4.4.3-20100728.tar.gz

    10、             配置环境变量:在终端输入 sudo vi /etc/profile , 打开profile文件, 在此文件最后加上:exportPATH=$PATH:/home/spring/NEON/opt/FriendlyARM/toolschain/4.4.3/bin ,保存profile;

    11、             重新启动Ubuntu,在终端输入 arm-linum-gcc -v ,假设显示gcc version 4.4.3等相关信息,说明配置成功。

    演示样例代码(http://hilbert-space.de/?p=22) test.cpp:

    void reference_convert (uint8_t * __restrict dest, uint8_t * __restrict src, int n)
    {
      int i;
      for (i=0; i<n; i++)
      {
        int r = *src++; // load red
        int g = *src++; // load green
        int b = *src++; // load blue 
    
        // build weighted average:
        int y = (r*77)+(g*151)+(b*28);
    
        // undo the scale by 256 and write to memory:
        *dest++ = (y>>8);
      }
    }
    
    void neon_convert (uint8_t * __restrict dest, uint8_t * __restrict src, int n)
    {
      int i;
      uint8x8_t rfac = vdup_n_u8 (77);
      uint8x8_t gfac = vdup_n_u8 (151);
      uint8x8_t bfac = vdup_n_u8 (28);
      n/=8;
    
      for (i=0; i<n; i++)
      {
        uint16x8_t  temp;
        uint8x8x3_t rgb  = vld3_u8 (src);
        uint8x8_t result;
    
        temp = vmull_u8 (rgb.val[0],      rfac);
        temp = vmlal_u8 (temp,rgb.val[1], gfac);
        temp = vmlal_u8 (temp,rgb.val[2], bfac);
    
        result = vshrn_n_u16 (temp, 8);
        vst1_u8 (dest, result);
        src  += 8*3;
        dest += 8;
      }
    }

    12、运行命令: arm-linux-gcc –g –c –Os –fPIC–mfloat-abi=softfp –mfpu=neon test.cpp

                          ar –r libtest[android].a *.o 成功生成libtest[android].a静态库。

    还有第二种方法,就是无需安装arm-linux-gcc,直接用Android-NDK就可以,操作过程例如以下:

    1、  接着以上第7步;

    2、  加入环境变量:在终端输入 sudovi /etc/profile , 打开profile文件,在此文件最后加上:

    export NDKBIN=/home/spring/NEON/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin(注意:绝对路径)

    export PATH=$NDKBIN:$PATH

    3、 保存profile文件,重新启动Ubuntu;

    4、 输入echo $PATH, 会有/home/spring/NEON/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin

    5、 编译test.cpp代码: arm-linux-androideabi-gcc -I/home/spring/NEON/android-ndk-r10/platforms/android-9/arch-arm/usr/include-c -Os –mfloat-abi=softfp –mfpu=neon test.cpp

    ar –r libtest[android].a *.o  成功生成libtest[android].a静态库。
  • 相关阅读:
    cmd输入输出重定向
    【转载】标准输入输出、错误输出、重定向标准输出
    cmd 重定向
    Windows下cmd标准输入输出重定向
    Windows 命令行输入输出重定向问题
    MATLAB数值计算与符号运算
    选择排序法 冒泡排序法 本质上是对内存进行整理
    学习笔记:Monkey runner(一)
    Monkey test
    fiddler:快速标识接口
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3946916.html
Copyright © 2020-2023  润新知