k@k-C410:/home/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
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
./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”,重新编译即可。
./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
./configure
make
编译时不会出现问题。但在使用时,会出现:
无法引用 setjmp 错误。
此问题未能解决。
先打开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位