如何将源代码编译成 ARM 二进制文件
How to compile a source into an ARM binary
我想在 ARM Raspberry Pi (Raspbian) 上将 VTK-DICOM 编译为 运行。可能吗?我应该从哪里开始?
为 Raspbian Debian Buster 映像和 ARMv6 构建
本教程还支持基于 ARMv6 CPU 的旧版 Rasperry Pi(A、B、B+、Zero)。
也可以看看:
GCC 8 Cross Compiler outputs ARMv7 executable instead of ARMv6
设置工具链
没有包含更新工具链的官方 git 存储库(参见 https://github.com/raspberrypi/tools/issues/102)。
这是一个 github 存储库,其中包括基于 GCC8 和更新版本的 ARMv6 的构建和预编译工具链:
https://github.com/Pro/raspi-toolchain
如项目自述文件中所述,这些是获取工具链的步骤。您也可以自己构建它(有关详细信息,请参阅自述文件)。
- 下载工具链:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
- 提取它。注意:工具链必须位于
/opt/cross-pi-gcc
中,因为它与位置无关。
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
大功告成!工具链现在位于 /opt/cross-pi-gcc
可选,将工具链添加到您的路径中,方法是添加:
export PATH=$PATH:/opt/cross-pi-gcc/bin
到名为 ~/.bashrc
的文件末尾
现在您可以注销并重新登录(即重新启动您的终端会话),或者在您的终端中 运行 . ~/.bashrc
以获取您当前的 PATH
添加终端会话。
从 Raspberry PI
获取库
要为您自己的 Raspberry Pi 进行交叉编译,可能安装了一些自定义库,您需要将这些库安装到您的主机上。
创建一个文件夹$HOME/raspberrypi
。
在您的 raspberrypi
文件夹中,创建一个名为 rootfs
.
的文件夹
现在您需要将整个 /lib
和 /usr
目录复制到这个新创建的文件夹中。我通常会调出 rpi 映像并通过 rsync 复制它:
rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs
其中 192.168.1.PI
替换为您 Raspberry Pi 的 IP。
使用 CMake 编译你的项目
要告诉 CMake 使用您自己的工具链,您需要有一个工具链文件来初始化编译器设置。
从这里获取这个工具链文件:
https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake
现在您应该能够编译您的 cmake
程序,只需添加这个额外的标志:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake
并设置正确的环境变量:
export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..
此处显示了一个示例 hello world:
https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh
来源:
我想在 ARM Raspberry Pi (Raspbian) 上将 VTK-DICOM 编译为 运行。可能吗?我应该从哪里开始?
为 Raspbian Debian Buster 映像和 ARMv6 构建
本教程还支持基于 ARMv6 CPU 的旧版 Rasperry Pi(A、B、B+、Zero)。 也可以看看: GCC 8 Cross Compiler outputs ARMv7 executable instead of ARMv6
设置工具链
没有包含更新工具链的官方 git 存储库(参见 https://github.com/raspberrypi/tools/issues/102)。
这是一个 github 存储库,其中包括基于 GCC8 和更新版本的 ARMv6 的构建和预编译工具链:
https://github.com/Pro/raspi-toolchain
如项目自述文件中所述,这些是获取工具链的步骤。您也可以自己构建它(有关详细信息,请参阅自述文件)。
- 下载工具链:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
- 提取它。注意:工具链必须位于
/opt/cross-pi-gcc
中,因为它与位置无关。
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
大功告成!工具链现在位于
/opt/cross-pi-gcc
可选,将工具链添加到您的路径中,方法是添加:
export PATH=$PATH:/opt/cross-pi-gcc/bin
到名为 ~/.bashrc
现在您可以注销并重新登录(即重新启动您的终端会话),或者在您的终端中 运行 . ~/.bashrc
以获取您当前的 PATH
添加终端会话。
从 Raspberry PI
获取库要为您自己的 Raspberry Pi 进行交叉编译,可能安装了一些自定义库,您需要将这些库安装到您的主机上。
创建一个文件夹$HOME/raspberrypi
。
在您的 raspberrypi
文件夹中,创建一个名为 rootfs
.
现在您需要将整个 /lib
和 /usr
目录复制到这个新创建的文件夹中。我通常会调出 rpi 映像并通过 rsync 复制它:
rsync -vR --progress -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr,opt/vc/lib} $HOME/raspberrypi/rootfs
其中 192.168.1.PI
替换为您 Raspberry Pi 的 IP。
使用 CMake 编译你的项目
要告诉 CMake 使用您自己的工具链,您需要有一个工具链文件来初始化编译器设置。
从这里获取这个工具链文件: https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake
现在您应该能够编译您的 cmake
程序,只需添加这个额外的标志:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake
并设置正确的环境变量:
export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..
此处显示了一个示例 hello world: https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh