Mac交叉编译C/C++到树莓派

第一步:llvm和binutils
第二步:Sysroot
第三步:将以上结合在一起

先决条件

本文期望您的 Mac 上安装了 Xcode 和 homebrew,并且您的树莓派运行 Linux 并设置为通过 ssh 登录。

第一步:llvm和binutils

为了为 Raspberry Pi 编译,我们需要 binutils 来组装和链接二进制文件,以及可以为 ARM CPU 生成代码的编译器。在这一步中,我们安装 clang 作为编译器和为硬浮点 GNU EABI 编译的 GNU binutils,这是大多数 Linux 发行版运行的。此外,我们还从 homebrew 安装了 rsync,后面用它来进行文件传输:

brew install arm-linux-gnueabihf-binutils llvm rsync

第二步:Sysroot

为了进行交叉编译,我们还需要 Raspberry Pi Linux 发行版附带的库。使用 rsync 将树莓派的相关目录同步到 Mac的主目录 。

在主目录中运行以下命令:

rsync -rzLRv --safe-links \
      pi@raspberrypi:/usr/lib/arm-linux-gnueabihf \
      pi@raspberrypi:/usr/lib/gcc/arm-linux-gnueabihf \
      pi@raspberrypi:/usr/include \
      pi@raspberrypi:/lib/arm-linux-gnueabihf \
      pi@raspberrypi:/lib/ld-linux-armhf.so.3 \
      sysroot/ 

这个过程等待时间较长

第三步:将以上结合在一起

现在我们将所有部分组合在一起,让我们编译我们的第一个 C 程序。将下面的 C 代码保存到名为 hello.c 的文件中:

int main() { return 42; }

为了编译它,我们启动在步骤 1 中使用 homebrew 安装的 clang 编译器,让它知道在哪里可以找到步骤 1 中的 binutils 和步骤 2 中的 sysroot:

`brew --prefix llvm`/bin/clang \
    --target=arm-linux-gnueabihf \
    --sysroot=$HOME/sysroot \
    -isysroot=$HOME/sysroot \
    -isystem=$HOME/sysroot/usr/include \
    -isystem=$HOME/sysroot/usr/include/arm-linux-gnueabihf \
    -L$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/10 \
    -B$HOME/sysroot/usr/lib/gcc/arm-linux-gnueabihf/10 \
    --gcc-toolchain=`brew --prefix arm-linux-gnueabihf-binutils` \
    -o hello \
    hello.c

第七八行的gcc版本需要根据树莓派存在的的gcc版本进行选择,运行此命令创建将在树莓派上运行的“hello”可执行文件。

参考自Cross compiling C/C++ from macOS to Raspberry Pi in 2 easy steps,翻译并有删改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值