编译libvpx

liunx下编译libvpx for android:

k@k-C410:/home/libvpx$ LDFLAGS="--sysroot= "
 CROSS=arm-linux-androideabi- ./configure --target=armv7-android-gcc --prefix=/usr/local/android/  --disable-examples  --disable-install-docs --disable-unit-tests --extra-cflags="-mfloat-abi=softfp -mfpu=neon --sysroot=" --disable-debug  --disable-debug-libs  --disable-shared --enable-static 

k@k-C410:/home/libvpx$ make

如果没加 --extra-cflags="-mfloat-abi=softfp -mfpu=neon "  ,可能会出现下面错误:

    [CC] vp8/common/arm/neon/bilinearpredict_neon.c.o
In file included from ../libvpx/vp8/common/arm/neon/bilinearpredict_neon.c:11:0:

e:\source\android\android-ndk-r9\toolchains\arm-linux-androideabi-4.6\prebuilt\w
indows\bin\../lib/gcc/arm-linux-androideabi/4.6/include/arm_neon.h:32:2: error:
#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to
 use arm_neon.h
../libvpx/vp8/common/arm/neon/bilinearpredict_neon.c:13:1: error: unknown type n
ame 'uint16_t'
../libvpx/vp8/common/arm/neon/bilinearpredict_neon.c: In function 'vp8_bilinear_
predict4x4_neon':

在libs-armv7-android-gcc.mk文件中的下面标志中加入:-mfloat-abi=softfp -mfpu=neon 
CFLAGS  = -mfloat-abi=softfp -mfpu=neon 

CXXFLAGS  =  -mfloat-abi=softfp -mfpu=neon

 

在用libvpx库时会出现下面错误:

1、undefined reference to `android_getCpuFeatures’

这个错是在加入libvpx时出现(但在单独编译libvpx时并没有出错),经搜索,在ndk目录下的source目录下发现有cpufeatures,该目录里的cpu-features就有android_getCpuFeatures的声明和定义,并且也说明了如何使用。这里采用比较原始的方式,就是自己编译了cpufeature的静态库,然后在需要的项目中在链接进去,大致步骤就是,加ndk的路径到环境变量–编译静态库文件,下面例子:

export PATH=$NDK:$PATH

arm-linux-androideabi-gcc -c cpu-features.c

arm-linux-androideabi-ar rcs libcpu-features.a cpu-features.o

 

然后就是链接到目标项目中,我是在LIBS中加入”-L路径 -lcpu-features”,重新编译即可。

编译时可能会出现下面错误:

k@k-C410:/home/android-ndk-r9c/sources/android/cpufeatures$ /home/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -c cpu-features.c
cpu-features.c:67:35: fatal error: sys/system_properties.h: No such file or directory
 #include <sys/system_properties.h>
                                   ^
compilation terminated.

解决方法:

位于ndk目录下:platforms/android-19/arch-arm/usr/include

k@k-C410:/home/android-ndk-r9c/sources/android/cpufeatures$ /home/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -I/home/android-ndk-r9c/platforms/android-19/arch-arm/usr/include -c cpu-features.c



 在windows下用mingw编译android版本libvpx:

./configure --target=armv7-android-gcc --sdk-path=$ANDROID_NDK --prefix=/usr/local/android/  --disable-examples  --disable-install-docs --disable-unit-tests--extra-cflags="-mfloat-abi=softfp -mfpu=neon " --disable-debug  --disable-debug-libs--disable-shared --enable-static 

make


会出现与linux下编译、使用相同的问题。按照上面的方法修改即可。

可能会出现下面的错误:

    [AR] libvpx_g.a
    [STRIP] libvpx.a < libvpx_g.a
/bin/sh: /e/source/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/p
rebuilt/windows/bin/arm-linux-androideabi-strip: Bad file number
make[1]: *** [libvpx.a] Error 126
make: *** [.DEFAULT] Error 2

这个是去掉调试符号时出错,我们可以不用这一步。

不用管它,直接:

mv libvpx_g.a libvpx.a

 使用时出现下面错误:

1、undefined reference to `android_getCpuFeatures’

Administrator@k-PC /e/source/android/android-ndk-r9/sources/android/cpufeatures

$ /e/source/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-gcc  -c cpu-features.c -I/e/source/android/android-ndk-r9/platforms/android-18/arch-arm/usr/include

Administrator@k-PC /e/source/android/android-ndk-r9/sources/android/cpufeatures

 $ /e/source/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-ar rcs   libcpu-features.a cpu-features.o

 

然后就是链接到目标项目中,我是在LIBS中加入”-L路径 -lcpu-features”,重新编译即可。

在mingw下编译windows版本:

./configure --disable-shared --enable-static  --disable-examples

make

出现下面错误:

    [CC] vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c.o
../libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c: In function 'vp9_filter_
block1d16_h8_avx2':
../libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c:76:3: warning: implicit d
eclaration of function '_mm256_broadcastsi128_si256' [-Wimplicit-function-declar
ation]
   filtersReg32 = MM256_BROADCASTSI128_SI256(filtersReg);
   ^
../libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c:76:16: error: incompatibl
e types when assigning to type '__m256i' from type 'int'
   filtersReg32 = MM256_BROADCASTSI128_SI256(filtersReg);
                ^
../libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c: In function 'vp9_filter_
block1d16_v8_avx2':
../libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c:321:16: error: incompatib
le types when assigning to type '__m256i' from type 'int'
   filtersReg32 = MM256_BROADCASTSI128_SI256(filtersReg);
                ^
make[1]: *** [vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c.o] Error 1
make: *** [.DEFAULT] Error 2

avx是amd的指令集,本人用的intel芯片,所以可以不用它,

进入libs-x86-win32-gcc.mk文件,删掉下面两行:

HAVE_AVX=yes
HAVE_AVX2=yes

 

继续 make,最后会出现下面错误:

    [AS] third_party/x86inc/x86inc.asm.o
    [AR] libvpx_g.a
    [STRIP] libvpx.a < libvpx_g.a
/bin/sh: /mingw/bin/strip: Bad file number
make[1]: *** [libvpx.a] Error 126
make: *** [.DEFAULT] Error 2

这个是去掉调试符号时出错,我们可以不用这一步。

不用管它,直接:

mv libvpx_g.a libvpx.a

 

在cygwin下编译windows版本:

./configure

make

编译时不会出现问题。但在使用时,会出现:

无法引用 setjmp 错误。

此问题未能解决。

 

 

在mingw下用vs2013编译工具交叉编译:

先打开vs2013命令行:

在vs2013命令行中启动msys:
C:\Program Files\Microsoft Visual Studio 12.0\VC>c:\mingw\msys\1.0\msys.bat

进入libvpx源码根目录,建立build文件夹:

mkdir build

cd build

../configure --disable-shared --enable-static --enable-static-msvcrt  --disable-docs --disable-examples --target=x86-win32-vs12--prefix=/usr/local/msvc #配置用vs2013工程

参数说明:

--disable-shared --enable-static --enable-static-msvcrt :允许静态库

--target:生成指定的目标工程

make   #会自动用vs2013编译工具进行编译

 

另外也可以在mingw生成vs2013工程,再找开vs2013 ide进行手工编译:

直接打开msys,进入libvpx源码根目录,建立build文件夹:

mkdir build

cd build

../configure --disable-shared --enable-static  --enable-static-msvcrt --disable-docs --disable-examples --target=x86-win32-vs12 #配置用vs2013工程

make   #生成vs2013工程

用vs2013打开vpx.sln进行编译

注意:libvpx需要yasm汇编编译器,所以需要先安装yasm程序,并把它设置到PATH环境变量中,否则,会在编译过程中找不到yasm。

 


linux下用mingw交叉编译:

       

        export CC=i686-w64-mingw32-gcc
        export CXX=i686-w64-mingw32-g++
        export AR=i686-w64-mingw32-ar
        export LD=i686-w64-mingw32-gcc
        export AS=i686-w64-mingw32-gcc
        export STRIP=i686-w64-mingw32-strip
        export NM=i686-w64-mingw32-nm

../configure --target=x86-win32-gcc --enable-libs --prefix=/home/rabbitim/ThirdLibary/build_script/../unix_mingw --disable-docs --disable-examples --disable-install-docs --disable-install-bins --enable-install-libs --disable-unit-tests --disable-debug --disable-debug-libs --extra-cflags=


--target=x86-win32-gcc   windows32位

--target=x86_64-win64-gcc  windwos64位


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值