当前位置: 首页 > news >正文

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到板卡,运行结果如下:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PostgreSQL主备环境配置
  • SpringBoot 整合 Easy_Trans 实现翻译的具体介绍
  • 人工智能有助于解决 IT/OT 集成安全挑战
  • 《动手学深度学习》笔记1.9——丢弃法 (一种正则化方法)
  • JVM基本组成
  • 【AI算法岗面试八股面经【超全整理】——深度学习】
  • PLC Twincat3 对传感器数据滑动平均滤波
  • HTML与JavaScript结合实现简易计算器
  • hadoop大数据平台操作笔记(上)
  • 聚合函数count 和 group by
  • Android Input系统原理一
  • MAC如何获取文件数字签名和进程名称
  • QT开发: Qt 框架中字符串核心类QString详解
  • Linux上Java项目环境安装
  • 深度学习:常见损失函数简介--名称、作用和用法
  • hexo+github搭建个人博客
  • 分享的文章《人生如棋》
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker容器管理
  • FineReport中如何实现自动滚屏效果
  • npx命令介绍
  • PAT A1120
  • Promise面试题2实现异步串行执行
  • vuex 笔记整理
  • vue自定义指令实现v-tap插件
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WePY 在小程序性能调优上做出的探究
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 翻译--Thinking in React
  • 力扣(LeetCode)965
  • 如何用vue打造一个移动端音乐播放器
  • 深入 Nginx 之配置篇
  • 手写一个CommonJS打包工具(一)
  • 一份游戏开发学习路线
  • 字符串匹配基础上
  • Python 之网络式编程
  • 从如何停掉 Promise 链说起
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​iOS实时查看App运行日志
  • ‌移动管家手机智能控制汽车系统
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (~_~)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转)大型网站架构演变和知识体系
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core + vue 搭建前后端分离的框架
  • .net core Redis 使用有序集合实现延迟队列
  • .Net mvc总结