第一步:llvm和binutils
第二步:Sysroot
第三步:将以上结合在一起
本文期望您的 Mac 上安装了 Xcode 和 homebrew,并且您的树莓派运行 Linux 并设置为通过 ssh 登录。
为了为 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条)