hi3559AV100上交叉编译faiss(facebook research)

交叉编译依赖库OpenBLAS

  1. 安装开源交叉编译器
    OpenBLAS支持C语言BLAS和fortran语言LAPACK,faiss用到这两个库,因此都需要编译。
    由于海思交叉编译工具不支持aarch64-linux-gnu-gfortran,无法编译fortran,这里选择开源版本相近的aarch64-linux-gnu工具链,下载地址如下:
    https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/
    拷贝到编译服务器,海思交叉切换到该开源工具链,执行如下命令:
tar xf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
vi .profile
PATH="$HOME/bin:$PATH:$HOME/bin/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin"
source .profile

aarch64-linux-gnu-gcc --version
查看是否安装成功

  1. 交叉编译OpenBLAS
    下载源码,拷贝到编译服务器
    https://github.com/xianyi/OpenBLAS
tar xf OpenBLAS-0.3.7.tar.gz
cd OpenBLAS-0.3.7
mkdir _install
make BINARY=64 CC=aarch64-linux-gnu-gcc FC=aarch64-linux-gnu-gfortran HOSTCC=gcc TARGET=ARMV8
make PREFIX=./_install install
cp ./_install/lib/libopenblas* ~/bin/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64/

开源工具链交叉编译faiss

  1. 继续使用开源工具链
  2. 下载源码,拷贝到编译服务器:
    https://github.com/facebookresearch/faiss
  3. 交叉编译
./configure prefix=$HOME/sourcecode/faiss-master/_install --without-cuda --host=aarch64-linux-gnu
make
make install

在_install/lib下生成库:libfaiss.a libfaiss.so

编译demos

vi makefile.inc文件末尾: LDFLAGS += -I $(includedir) -L $(libdir)
make -C demos/

海思工具链交叉编译faiss

  1. 切换回海思工具链
  2. 交叉编译
    注意:不要进行congfigure,会通不过
make clean
make
make install

遇到错误

错误1: IndexFlat.cpp:1:0: error: unknown value 'armv8.2-a' for -march
解决方法:makefile.inc中CPUFLAGS = -march=armv8.2-a to CPUFLAGS = -march=armv8-a

错误2:/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: 找不到 -lopenblas
解决方法:sudo cp OpenBLAS-0.3.7/_install/lib/libopenblas* /opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/lib/

**编译demos: make -C demos **

错误:
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: libgfortran.so.3, needed by /opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../target/usr/lib/libopenblas.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../target/usr/lib/libopenblas.so:对‘_gfortran_concat_string@GFORTRAN_1.0’未定义的引用
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../target/usr/lib/libopenblas.so:对‘_gfortran_etime@GFORTRAN_1.0’未定义的引用
解决方法:拷贝开源工具中的动态库libgfortran.so.3到海思交叉工具链下面
sudo cp ~/bin/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/lib64/libgfortran.* /opt/hisi-linux/x86-arm/aarch64-himix100-linux/target/usr/lib/ -rdf

最后,拷贝demos到板子上运行,需要将上面的动态库libopenblas/libfaiss/libgfortran挂载到板子。

你可能感兴趣的:(#,A2.,协议族)