Openblas全编译Android版 macos

最近遇到的项目需要全编译Openblas,网上找了些资料,还是不能完美的做到编译成功,自己踏过坑后,现在整理一下,废话不说,开始全编译。

1:配置android ndk环境

现在地址:http://www.androiddevtools.cn/

找到自己喜欢的版本和对应的系统下载,我的版本是android-ndk-r12b,系统是macOs.

2:配置环境变量

zhuxiujundeMacBook-Pro:~ zhuxiujun$ pwd

/Users/zhuxiujun

zhuxiujundeMacBook-Pro:~ zhuxiujun$ open .bash_profile 

添加:

export NDK=/Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b

export PATH=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH

export SYSROOT=$NDK/platforms/android-19/arch-arm
export CC="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"


zhuxiujundeMacBook-Pro:~ zhuxiujun$ source .bash_profile 

让环境变量生效。

3:开始编译

参考官方文档:https://github.com/xianyi/OpenBLAS/wiki/How-to-build-OpenBLAS-for-Android


我们编译就不需要Fortran了。文档中说0.2.19及其以前的版本编译要加libs,且不是编译全部,所以我选择了0.2.20版本,决定编译armv7,所以编译命令就是:

make TARGET=ARMV7 ARM_SOFTFP_ABI=1 HOSTCC=gcc CC=arm-linux-androideabi-gcc NOFORTRAN=1

不管三七二十一,先在终端运行编译命令跑一下:

结果报出stdio.h找不到,官方文档也明示了:


心理不爽,明明知道还不给我们添坑。

添坑步骤如下:

在以下文件中

OpenBLAS-0.2.20/interface/Makefile
OpenBLAS-0.2.20/driver/level2/Makefile
OpenBLAS-0.2.20/driver/level3/Makefile
OpenBLAS-0.2.20/driver/others/Makefile
OpenBLAS-0.2.20/kernel/Makefile

特别要求:

OpenBLAS-0.2.20/interface/Makefile :

override CFLAGS += -I.替换为:override CFLAGS += -I/Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/include -I.

其他的加入:
override CFLAGS += -I/Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/include -I.

再次编译:

make TARGET=ARMV7 ARM_SOFTFP_ABI=1 HOSTCC=gcc CC=arm-linux-androideabi-gcc NOFORTRAN=1



再次掉坑,错误永远在案发现场可以找到,错误的地方指出了所在的路径没有相关库,那就做软连接吧,方法如下:

.o找不到的解决方法:

在OpenBLAS-0.2.20/exports路径下运行
ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o ./
ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/crtend_so.o ./
ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o ./

ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/crtend_android.o ./

-lm,-lc-ldl找不到的解决方法:

在/Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x 运行:

ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/libc.so ./
ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/libm.so ./
ln -snf /Users/zhuxiujun/Library/Android/sdk/android-ndk-r12b/platforms/android-19/arch-arm/usr/lib/libdl.so ./

再次编译:


完美通过。

4:最后安装:

make PREFIX=/Users/zhuxiujun/AndroidStudioProjects/OpenBLAS-0.2.20/install install


参考文献:

https://github.com/xianyi/OpenBLAS/wiki/How-to-build-OpenBLAS-for-Android

https://blog.csdn.net/Tommy_wxie/article/details/74225303







阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页