美文网首页
在MACOS上实现交叉编译

在MACOS上实现交叉编译

作者: copys | 来源:发表于2018-08-21 11:42 被阅读0次

在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能胜任了,所以,实现交叉编译还是很必要的。通过交叉编译,我们就能够在我们的pc上编译出能够在嵌入式设备上使用的可执行程序。

       下面,我将一步步讲解如何在MAC OS上实现树莓派(arm)的交叉编译。

一。新建一个磁盘映像

       MAC OS的文件系统默认是大小写不敏感的,而交叉编译工具链是基于大小写敏感的文件系统的,所以我们不能直接把工具链安装在原来的文件系统中,而是需要新建一个大小写敏感的磁盘印象用于安装工具链。

实现这一功能并不难,使用系统自带的磁盘工具(disk utility

)就可以实现了。打开磁盘工具,然后 文件>新建>空白磁盘映像,然后在弹出窗口中设置名称为arm-x(便于后续操作),大小至少为500M,格式为Mac OS扩展(区分大小写,日志式)的映像(如下图)。  


二。下载已经编译完的工具链

从下面的链接下载已经编译完的arm GNU Linux 工具链:

https://github.com/downloads/UnhandledException/ARMx/ARMx-2009q3-67.tar.bz2

如果你想自己一步步编译,了解工具链中的具体元素的话,可以看一下下面这篇文档:

https://github.com/UnhandledException/ARMx/wiki/Sourcery-G---Lite-for-ARM-GNU-Linux-(2009q3-67)-for-Mac-OS-X

三。解压工具链压缩包到磁盘映像

在终端进入压缩包所在的目录,执行下面的指令即可:

(新建的磁盘映像默认是挂载的,如果没有挂载的话请先手动挂载)

tar -zx -C /Volumes/arm-x/ --strip-components 1 -f ARMx-2009q3-67.tar.bz2

四。使用工具链

现在已经能够直接使用工具链了,比如我写了一个hello.c程序,现在可以直接使用工具链对程序进行编译。

        在终端执行:

         /Volumes/arm-x/bin/arm-none-linux-gnueabi-gcc hello.c -o hello

        就可以获得一个名为hello的可执行程序。这个程序在mac下是不能运行的,需要在arm处理器的设备上才能运行。

      当然,如果你嫌输入一大串路径去调用arm-none-linux-gnueabi-gcc程序麻烦的话,可以把/Volumes/arm-x/bin目录添加到PATH里去,这样就能够像使用系统命令一样使用了。(添加环境变量的方法很多,建议把路径添加到~/.profile文件中去,具体操作百度一下你就知道)

五。把hello程序上传到树莓派上

      如果你自己知道怎么把文件上传到树莓派上,那么请直接上传吧。如果不会,我在这里提供两种方法:

        1.使用sftp:这种方法无需另外设置,可以直接把文件上传到树莓派,但每一次更改都需要重新上传。

            步骤:

sftp pi@192.168.1.5 (ip地址根据你的地址进行更改)

                     然后输入密码raspberry

                      put /本地文件路径    /上传到树莓派上的目录

(例如:put /Users/icool/Desktop/hello . )

      2.使用NFS:这种方法需要先进行配置,但配置好后使用十分方便。可以将树莓派上的文件直接映射到mac上,这样在mac上修改即可,无需再上传。

              具体步骤可以参考这篇文档:

   http://server.zdnet.com.cn/server/2007/0831/482007.shtml

六。在树莓派上执行上传的程序

ssh连接上树莓派(或者任意方法,登陆上树莓派即可)。

           然后进入hello程序所在目录,执行:

./hello

结果如下:

七。测试浮点程序

通过上一步可以发现交叉编译得到的hello,world程序可以在树莓派上正常运行,下面要检验一下浮点程序是否也可以正常运行。

先写一个简单的浮点程序:

       检验结果:

相关文章

  • 在MACOS上实现交叉编译

    在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能...

  • OLLVM in Android Studio

    0x01 Ollvm编译 系统: macos 10.15.6 在之前的macos系统上,编译ollvm还是比较流畅...

  • go 常用命令记录

    交叉编译 在mac上编译64位linux, Windows的命令编译命令 在windows 上编译64位linux...

  • 在macOS上编译FFmpeg

    一、下载源代码 当前编译版本为4.4,操作系统版本为10.15.4 二、编译源代码 1、进入源代码目录 2、运行配...

  • JETSON交叉编译

    1.交叉编译简要流程及必要性 程序在X85和ARM机器指令集不同,需要交叉编译才能在不同机器上运行。交叉编译优点 ...

  • VSCode+Cortex-Debug+arm-none-eab

    1,配置arm-none-eabi+msys 实现在Windows上的make交叉编译,参考https://www...

  • go 实现交叉编译

    将Golang程序 在windows下编译成Linux下可执行的二进制文件并且执行 设置编译环境 在xx.go所在...

  • MacOS下使用cgo交叉编译

    最近研究了一下jna,发现可以用go干点事情。基本步骤: 安装go (这句就是废话) 安装docker(用来下载用...

  • TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下。 1...

  • FFmpeg开发笔记(十一):ffmpeg在移植到海思HI35x

    前言   上一篇交叉编译了ffmpeg的海思版本,使用交叉编译的qt的ffmpeg播放器在海思上播放,本片是将ff...

网友评论

      本文标题:在MACOS上实现交叉编译

      本文链接:https://www.haomeiwen.com/subject/hqvdiftx.html