Ubuntu中交叉编译armadillo库

news2024/11/20 18:33:42

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

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

a7bb2bacf6f64f9f80db9f08849b82ba.png

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

6c0fc217244743d7aaee44736f00580e.png

改成:

100c30fe402f41acba2b20c4804b2e15.png

注意:

/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文件

5579d2a77a0e4037a99077b4340865df.png

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

3142990b0a034163a718efd10b6a79c7.png

e)生成f2clib

输入:make f2clib

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

7e215572846b4077aa53f36fe64a56f6.png

f)生成BLAS库

输入:make blaslib

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

b25702a6de11415f987fa851953d9f4f.png

g)生成LAPACK库

输入: cd SRC

输入:make

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

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

df22c3169d844842a543a01f87ea9897.png

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.编译armadillo

a)下载armadillo

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

b)修改CMakeLists.txt

set(ARMA_USE_LAPACK  false) 修改为

set(ARMA_USE_LAPACK  true)

405a35d3652a42b09929034e11efce92.png

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++

85174baf337d459f9b9b077ba43042d2.png

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

85471c4043b34860be1a6ebe4893f02c.png

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)

f84a076ed8434103ba0d6891da6f655a.png

g)编译

输入:make

就可以在test1下生成smoke_test

eeb0e873b2db4ff39749e6cd989cca25.png

h)拷贝库

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

i)运行

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

6589cda222af419d96c86a9073235480.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高性能内存池】page cache 5

page cache 1 page cache的框架2 central cache从page cache申请n页span的过程3 page cache 的结构3.1 page cache类框架3.2 central cache向page cache申请span3.3 获取k页的span page cache的结构和central cache是一样的,都是哈希桶的结构,并且挂载的…

JAVA全球互联同城速达国际版同城跑腿快递代取帮买帮送一体化服务系统源码

全球互联,便捷生活新篇章! 🌟 开篇:跨越国界的即时服务革命 在这个快节奏的时代,你是否也曾为忙碌的生活而烦恼?购物、取件、送物……这些日常琐事似乎总在不经意间占据了我们宝贵的时间。但现在&#xf…

003集—— CAD批量划线和text文字(CAD—C#二次开发入门)

本例通过for循环创建255条线,颜色不同,并在线的右端点处注记文字。 效果如下: 本文有个事务的封装函数,如下: private ObjectId AppendEntity(Entity entity) { ObjectId objectId; Database db HostApplication…

❤Node实现接口增删改查(文章为例)

❤Node实现接口增删改查(文章为例) 1、文章表的创建​ 接下来我们新建一个文章数据表article,实现对于文章部分的管理功能接口 根据文章我们创建一个对应的 SQL 数据表 javascript CREATE TABLE articles (id INT AUTO_INCREMENT PRIMAR…

亚马逊卖家如何利用自养号测评策略低成本提升销量?

在跨境电商的平台上,随着市场逐渐成熟与竞争的白热化,众多卖家正面临流量增长乏力与转化率提升困难的双重挑战。为了在这日益激烈的竞争环境中脱颖而出,卖家们纷纷加大投入,探索多样化的推广策略,但往往因策略不够精准…

探索Kombo:AI与API的完美结合

文章目录 探索Kombo:AI与API的完美结合背景介绍库的定义安装指南简单函数使用场景应用常见问题及解决方案总结 探索Kombo:AI与API的完美结合 背景介绍 在当今快速发展的人工智能领域,Kombo库以其独特的优势脱颖而出。Kombo是一个专注于AI的…

2024年7月大众点评全国爱车前百名城市分析

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时,大众点评的数据参考价值非常大,截至2024年7月,大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 分析研究的字段维度包括大众点评数字id、字母…

微信商城小程序怎么弄_重塑购物体验

在数字化浪潮的推动下,微信商城小程序正逐步成为消费者购物的新宠儿。它不仅打破了传统电商的界限,更以其便捷性、高效性和个性化服务,重新定义了购物体验。今天,让我们一同探索微信商城小程序如何以独特魅力,引领未来…

巴鲁夫rfid读头国产平替版——高频RFID读写器

随着RFID技术的不断发展,国内RFID企业的数量也在不断地变多,国产RFID读写器的质量也越来越高。具有着价格实惠、质量可靠等特点,成为了可平替国外RFID产品的首要选择。健永科技的高频RFID读写器JY-H830,是一款可平替巴鲁夫rfid读头…

完美解决Idea中如何对Java Agent进行断点调试的方式

1、前言 在日常开发中,可能会存在写一个Java Agent到项目中去,Agent的实现可能是复杂的,有时候会出现attach到进程上后,发现没效果,也不知道怎么调试,只能通过打日志的方式实现,效率实在是太低…

大数据实时数仓Hologres(三):存储格式介绍

文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指…

C++ bitset(位图)的模拟实现

文章目录 一、bitset接口总览二、bitset模拟实现1. 构造函数2. set、reset、flip、test3. size、count4. any、none、all5. 打印函数 三、完整代码 一、bitset接口总览 成员函数功能set设置指定位或所有位为1(即设置为“已设置”状态)reset清空指定位或…

华为eNSP:MAC地址安全

一、什么是MAC地址安全 MAC地址安全是一种网络安全措施,用于保护网络设备和通信免受未经授权的访问和潜在的安全威胁。以下是对MAC地址安全的详细介绍: MAC地址概述 定义:MAC地址(Media Access Control Address)是网络…

【绿豆蛙的归宿】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; const int M 2e510; int h[N], e[M], ne[M], idx, w[M]; double p[M]; int cnt[N]; double E; int n, m; void add(int a, int b, int c) // 添加一条边a->b {p[idx] 1, w[idx] c, e…

STM32F1+HAL库+FreeTOTS学习14——数值信号量

STM32F1HAL库FreeTOTS学习13——数值信号量 1. 数值信号量2. 相关API函数2.1 创建计数信号量2.2 获取信号量2.3 释放信号量2.4 删除信号量2.5 获取信号量的计数值 3. 操作实验1. 实验内容2. 代码实现&#xff1a;运行结果 上一期我们学习了二值信号量 &#xff0c;这一期学习计…

锅圈食品业绩承压显著:门店减少255家,押注肴肴领鲜打入农贸市场?

《港湾商业观察》廖紫雯 日前&#xff0c;锅圈食品&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称&#xff1a;锅圈&#xff0c;02517.HK&#xff09;发布2024年上半年业绩运营情况。作为“在家吃饭第一股”&#xff0c;锅圈于2023年11月成功登陆港交所&#…

关于BSV区块链覆盖网络的常见问题解答(上篇)

​​发表时间&#xff1a;2024年9月20日 在BSV区块链上的覆盖网络服务为寻求可扩展、安全、高效交易处理解决方案的开发者和企业家开辟了新的视野。 作为开创性的曼达拉升级的一部分&#xff0c;覆盖网络服务提供了一个强大的框架&#xff0c;用于管理特定类型的交易和数据访问…

署名文章 | 对桂花AP2/ERFs的比较转录组分析揭示了OfERF017介导的有机酸代谢途径在花衰老中的作用

发表期刊&#xff1a;Frontiers in plant science 发表日期&#xff1a;2024年9月26日 影响因子&#xff1a;4.1 发表单位&#xff1a;湖北科技学院 研究背景 “玉露沾衣冷&#xff0c;金风拂面凉。桂花香满袖&#xff0c;秋色入诗囊。”桂花&#xff0c;中国十大名花之一…

Linux 网络配置 (深入理解)

前言 前期我比较迷惑Ubuntu 的网络配置。 我接触比较多的 Linux 发行版都是 Ubuntu &#xff0c;我按照网上的一些教程配置网络发现&#xff0c;没有相关网络配置文件夹。然后我发现不是我的问题而是不同版本的配置方式和工具是不一样的。然后有些配置已经弃用了。 常见的网络…

国庆节快乐|中国何以成为中国

华夏之土&#xff0c;广袤无垠&#xff1b;中华之史&#xff0c;源远流长。自古以来&#xff0c;中原大地物华天宝&#xff0c;人杰地灵&#xff0c;遂成一国&#xff0c;是谓中国。然中国之所以为中国&#xff0c;非徒地大物博、历史悠久也&#xff0c;更有其深厚之文化底蕴、…