Mac交叉编译CC++到树莓派

Mac交叉编译CC++到树莓派,第1张

第一步: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,翻译并有删改

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1324260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存