liunx下编译libvpx for android:
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
出现下面错误:
[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
gcc -c cpu-features.c
ar rcs libcpu-features.a cpu-features.o
然后就是链接到目标项目中,我是在LIBS中加入”-L路径 -lcpu-features”,重新编译即可。
在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
会出现与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
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下编译:
./configure
make
编译时不会出现问题。但在使用时,会出现:
无法引用 setjmp 错误。
此问题未能解决。
原文:http://blog.csdn.net/kl222/article/details/23101115