自学内容网 自学内容网

Ubuntu中交叉编译armdillo库

        网上关于交叉编译armdillo库比较少,借鉴了一些但是在前几天编译时总是磕磕绊绊,于是写一个详细的编译过程。

        交叉编译armdillo库包含两个步骤:交叉编译依赖库和交叉编译armdillo库。armdillo官网介绍依赖库如下图所示:

        需要注意如果交叉编译armdillo库就不要在ubuntu中使用apt安装libopenblas-dev liblapack-dev libarpack2-dev libsuperlu-dev,这样会在编译armdillo时,自动找ubuntu路径下的依赖库,导致编译失败,当然修改CMakeLists.txt和CMakeCache.txt能够解决该问题。这里采用不安装依赖库的方式,这样在编译armdillo时,会找不到对应的依赖库,使得armdillo库顺利编译通过。

1、依赖库交叉编译

a)下载库文件

        路径如下:https://netlib.org/clapack/clapack-3.2.1-CMAKE.tgz

        然后解压,进入clapack-3.2.1-CMAKE路径,打开终端

b)创建make.inc

        输入:

cp make.inc.example make.inc

c)修改make.inc

        把里面的CC和LOADDER修改为交叉编译器。

改成:

注意:

/home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc为我ubuntu的交叉编译器路径,根据实际情况修改为对应交叉编译器。

d)修改clapack-3.2.1-CMAKE/F2CLIBS/libf2c/Makefile文件

ld -r -x -o $*.xxx $*.o修改为:

/home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld -r -x -o $*.xxx $*.o

e)生成f2clib

输入:make f2clib

第一次会报错,再输入一次就会在F2CLIBS路径下生成libf2c.a

f)生成BLAS库

输入:make blaslib

会在clapack-3.2.1-CMAKE目录下生成:blas_LINUX.a

g)生成LAPACK库

输入: cd SRC

输入:make

会在clapack-3.2.1-CMAKE目录下生成lapack_LINUX.a

如果报错,可以退回clapack-3.2.1-CMAKE然后make lapacklib,然后再回到SRC,再次make

h)复制库文件到特定路径

$cp libf2c.a [CROSS-COMPILE LIBRARY PATH]/libf2c.a

$cp blas_XXXXX.a [CROSS-COMPILE LIBRARY PATH]/libblas.a

$cp lapack_XXXXX.a [CROSS-COMPILE LIBRARY PATH]/liblapack.a

2.编译armdillo

a)下载armdillo

Armadillo: C++ library for linear algebra & scientific computing - Download

b)修改CMakeLists.txt

set(ARMA_USE_LAPACK  false) 修改为

set(ARMA_USE_LAPACK  true)

c)直接cmake

输入:

cmake .

注意有个点

d)修改CMakeCache.txt

//CXX compiler

CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++

修改为:

CMAKE_CXX_COMPILER:FILEPATH=/home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

e)修改Cmakefile->armadillo.dir->link.txt

把G++修改为如下

/home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++  -fPIC  -O2  -Wl,--no-as-needed -shared -Wl,-soname,libarmadillo.so.12 -o libarmadillo.so.12.8.4 CMakeFiles/armadillo.dir/src/wrapper1.cpp.o CMakeFiles/armadillo.dir/src/wrapper2.cpp.o

f)修改test1路径下的CmakeLists.txt

将前面生成的依赖库,link进来

target_link_libraries(smoke_test PRIVATE /home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/usrlib/liblapack.a)

target_link_libraries(smoke_test PRIVATE /home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/usrlib/libblas.a)

target_link_libraries(smoke_test PRIVATE /home/fmsh/work/FMQL-Linux-SDK_20201022/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/usrlib/libf2c.a)

g)编译

输入:make

就可以在test1下生成smoke_test

h)拷贝库

从ubuntu中将libarmadillo.so.12.8.4拷贝出来,并重命名为libarmadillo.so.12,随后拷贝到到板卡系统中的usr/lib

i)运行

拷贝test1/smoke_test到板卡,运行结果如下:


原文地址:https://blog.csdn.net/weixin_39813867/article/details/142532572

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!