前言

最近接了个任务,需要把代码移植到armv7平台,搜寻相关方法,了解到可以利用交叉编译工具如:gcc-linaro-arm-linux-gnueabihf。把自己依赖的第三方库代码和自己代码分别编译就好。后来公司买了个树莓派,我直接在树莓派上编代码了,过程中没有很大的问题,记录下。

1.确定第三方依赖库是否可以移植

我代码确实依赖了不可移植的如mkl库,这是intel相关的,所以移植到arm肯定不行,于是换kaldi支持的另一种库,openblas。先替换然后让代码正常调用openblas。

2. 编译依赖的第三方库源码

我这边依赖了4个库:openfst openblas silk crfpp

  • openfst,crfpp:编译起来很方便,没啥特殊,和其它平台编一样,唯一错误好像crfpp没指定-fPIC。

  • openblas:这个需要指定指令架构和gfortran编译器,第一次我没指定gfortran虽然也编完了,但是实际它没编lapack和blas,后来编译命令是这样:

make TARGET=ARMV7 FC=arm-linux-gnueabihf-gfortran

    注:默认树莓派没装这个gfortran 这个需要自己装的gfortran。

  • silk 安装也需要指定指令集和cpu如下

    make clean all TARGET_CPU=Cortex-A53 TARGET_ARCH=armv7

    注:对于编依赖库都是跟着readme来的,幸好这些依赖库都支持跨平台编译

3. 编译运行自己代码

编译

这些库装完,接下来就是编译自己代码,我这边编译只遇到了一些头文件缺失问题,比如silk在arm平台需要多加相应头文件,再如链接缺失问题,类似gfortran选项,这是因为项目换用openblas引起的,编译阶段问题不好预估和自己代码有关,遇到了及时解决就行。

运行

编完就知道不会这么顺利,果然运行出现问题-段错误。这时候不要慌,gdb调试下,我遇到这个段错误当时查看调用栈信息时刚开始由于多线程看不出来,后来改成非线程调用可以清楚看到执行到openfst库里边崩溃,联想到版本问题,后来重新编其它版本,代码正常运行。

记一次程序从x86_64linux平台移植到armv7平台的更多相关文章

  1. net-snmp5.7.3移植到arm-linux平台

    net-snmp5.7.3移植到arm-linux平台 本次交叉编译在ubuntu 15.04 64位系统下进行. 准备工作 在编译移植前有几项准备工作需要完成. 1下载net-snmp 5.7.3源 ...

  2. MIPS平台移植apache 2.2.7

    参考文章: http://wenku.baidu.com/view/94e08a20a5e9856a561260e2.html http://httpd.apache.org/docs/2.4/ins ...

  3. Windows下将ImageMagick移植到Android平台

    Windows下将ImageMagick移植到Android平台 原文链接  http://www.pedant.cn/2014/06/18/imagemagick-ported-android/ I ...

  4. 只能用Android studio做平台移植了! 在Windows10下, 开发Android。

    安装好IDE后, 会一直显示同步失败, 看看如下步骤: 需要注意的是: -> 安装NDK      自带的NDK版本有问题    自己去下一个15版本的 -> 按照系统提示一步一步安装其他 ...

  5. php平台移植windows和linux

    2015/1/14 今天项目中遇到一个问题,在本地运行没有问题,挂到服务器上,就运行错误.过程中比较粗心,知道导致这样的原因,居然小时漏掉了一些细节. 比如,在php中通过声明__autoload() ...

  6. FFmpeg的Android平台移植—编译篇

    摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: ubuntu-12.04.5 android-ndk64-r10-linux-x86_64. ...

  7. 基于Cocos2d-x-1.0.1的飞机大战游戏迁移到Cocos2d-x-3.0版本,并移植到Android平台成功运行

    一.版本迁移中的问题 1.游戏元素Sprite.Label.Action等等的创建函数名都改为create. 2.函数的回调callfunc_selectorcallfuncN_selectorcal ...

  8. QT4.8.5环境移植到嵌入式平台

    QT4.8.5环境移植到嵌入式平台 参考:Qt移植到ARM Linux教程 http://www.veryarm.com/930.html 清除配置: sudo make confclean 配置: ...

  9. J2ME项目移植到Android平台六大注意事项

    很多J2ME项目如何移植到Android平台呢?Java虽然号称是跨平台应用但是目前的移植问题还是比较严重的,不知道未来Sun推出JavaFx或F3时会出现什么问题,如何从J2ME移植到Android ...

随机推荐

  1. JAVA学长

    https://www.cnblogs.com/chenmingjun/p/9697371.html

  2. 计算机网络(十一),HTTP和HTTPS区别

    目录 1.SSL(Security Sockets Layer,安全套接层) 2.加密方式 3.HTTPS数据传输流程 4.HTTP和HTTPS的区别 5.HTTP真的很安全吗 十一.HTTP和HTT ...

  3. Codeforces 622F The Sum of the k-th Powers ( 自然数幂和、拉格朗日插值法 )

    题目链接 题意 : 就是让你求个自然数幂和.最高次可达 1e6 .求和上限是 1e9 分析 :  题目给出了最高次 k = 1.2.3 时候的自然数幂和求和公式 可以发现求和公式的最高次都是 k+1 ...

  4. python中oepen及fileobject初步整理之划水篇

    open选项 参考官方文档,很多东西也没有看懂,将自己理解的部分先整理到这里,以后还是要参阅官方文档的. open (file, mode='r', buffering=-1, encoding=No ...

  5. the nearest point/vertex point of linestring

    引用https://github.com/Toblerity/Shapely/issues/190 snorfalorpagus commented on 18 Oct 2014 The point ...

  6. [LibreOJ 3119]【CTS2019】随机立方体【计数】【容斥】

    Description Solution 记\(N=min(n,m,l)\) 首先考虑容斥,记\(f(i)\)为至少有i个位置是极大的,显然极大的位置数上界是N. 那么显然\(Ans=\sum\lim ...

  7. SpringApplication及banner的配置

    配置SpringApplication 如果SpringApplication无法满足要求,你可以自己创建一个局部实例,然后对其进行设置: public static void main(String ...

  8. vue一些注意事项

    1.生命周期钩子的 this 上下文指向调用它的 Vue 实例. 不要在选项属性或回调上使用箭头函数,比如 created: () => console.log(this.a) 或 vm.$wa ...

  9. LeetCode 60. 第k个排列(Permutation Sequence)

    题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "1 ...

  10. Edge Detection

      Edge Detection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22604   Accepted: 5311 ...