所有的操作以ubuntu环境为例
1.NDK环境设置
1.配置系统环境变量
sudo vim /etc/profile
命令。在文件末尾添加如下内容并保存退出:
export NDK_HOME=ndk的路径
export PATH=$PATH:$NDK_HOME
如下图:
2.继续执行以下命令:
source /etc/profile
3.最后继续执行
ndk-build -v
命令 ,出现以下信息说明ndk配置成功
交叉编译libsodium
1.下载libsodium源码:
https://download.csdn.net/download/weixin_42713739/11632078
2.执行:./autogen.sh
3.执行:./dist-build/android-armv7-a.sh
说明:执行2和3的过程中,可能会报缺少什么库之类的错误。apt安装就行:apt-get install 库名
如果报错:You should probably set ANDROID_NDK_HOME to the directory containing NDK 路径没有设置或设置错误。上面有详细配置NDK路径说明。
4.建立link
#arm
ln -s libsodium-android-armv6 libsodium-android-armeabi
ln -s android-toolchain-armv6 android-toolchain-armeabi
#arm7
ln -s libsodium-android-armv7-a libsodium-android-armeabi-v7a
ln -s android-toolchain-armv7-a android-toolchain-armeabi-v7a
编译完成在android-toolchain-armv7-a目录下可以找到对应的头文件和库文件。
交叉编译libvpx
1.用make-standalone-toolchain.sh生成Android NDK的交叉编译链
-
下载Android NDK,我们选择版本android-ndk-r10e
-
把android-ndk-r10e解压出来。
-
进入到android-ndk-r10e目录,执行
./build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=arm-linux-androideabi-4.8 --install-dir=/home/username/android_ndk_toolchain
-
android_ndk_toolchain 就是生成出来的独立的Android NDK的交叉编译链,用android_ndk_toolchain编译出来的程序可以动态加载Android NDK里的动态库。
配置执行
./configure --target=armv7-android-gcc --sdk-path=/home/android_ndk_toolchain --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
make install
编译成功。
libvpx编译报错
1.vpx_ports/arm_cpudetect.c:95:10: fatal error: ‘cpu-features.h’ file not found
解决办法:
#for adding cpufeatures
LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS := -DHAVE_NEON=1
endif
$(call import-module, android/cpufeatures)
添加以上代码到build/make/Android.mk文件最后。
2.vpx_ports/arm_cpudetect.c:95:10: error: ‘cpu-features.h’ file not found with include; use “quotes” instead
解决办法:
找到cpu-features.h和cpu-features.c放到arm_cpudetect.c的同一级目录。将<cpu-features.h>改为"cpu-features.h"
3.arm_neon.h:28:2: error: “NEON support not enabled”
4.rm_neon.h:48:24: error: ‘neon_vector_type’ attribute is not supported for this target
3和4错误是因为./configure的时候没有加:–extra-cflags="-mfloat-abi=softfp -mfpu=neon "导致的。