如何为Raspberry Pi 1创建现代交叉编译工具链?

时间:2015-05-06 09:05:11

标签: gcc raspberry-pi cross-platform raspbian

至少Debian没有提供可用的工具链来为Raspberry Pi 1进行交叉开发.Linaro toochain在撰写本文时对于Qt5开发人员分支而言已经过时了。有一个项目crosstools-ng,可以轻松地为各种系统构建自定义工具链。它支持相当现代的GCC 4.9.1。配置有点试错,但主要问题是,工具链没有找到所有包含文件或库。如何配置crosstools-ng以便它可以用来编译Raspberry Pi 1的Qt5?

可以在此处找到Raspian的Raspberry Pi如何准备使用此工具链的后续操作: How do I prepare a Raspberry Pi with Raspbian so I can cross compile Qt5 programs from a Linux host?

1 个答案:

答案 0 :(得分:3)

我首先从未找到的include / library问题开始,因为这有点超出了正常的crosstools-ng安装/使用。

问题是,crosstools-ng正确地创建了gcc编译器,其目标元组如:arm-vendor-linux-gnueabihf。这是完全正确的。但是,Raspian在没有供应商字符串的文件夹中安装包含和库:/ lib / arm-linux-gnueabihf。看起来pkg-config无法处理这个问题。 crosstools-ng可能与元组一致,但是由于拒绝添加删除此供应商字符串的函数,因此也有点沉重。 crosstool-ng中允许修改元组和供应商字符串的功能不是替代方案。他们只是用新名称创建符号链接,但元组在GCC中是硬编码的。正确摆脱供应商字符串的唯一方法是修补crosstools-ng源。

因此,获得功能性Raspberry Pi / Raspian gcc 4.9.1工具链的第一步是克隆crosstools-ng存储库:

git clone git://crosstool-ng.org/crosstool-ng

其次是补丁来源:

diff --git a/scripts/config.guess b/scripts/config.guess
index dbfb978..9a35943 100755
--- a/scripts/config.guess
+++ b/scripts/config.guess
@@ -176,7 +176,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
            sh3el) machine=shl-unknown ;;
            sh3eb) machine=sh-unknown ;;
            sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH} ;;
        esac
        # The Operating System including object format, if it has switched
        # to ELF recently, or will in the future.
diff --git a/scripts/config.sub b/scripts/config.sub
index 6d2e94c..f92db2b 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -317,7 +317,7 @@ case $basic_machine in
        | we32k \
        | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
-               basic_machine=$basic_machine-unknown
+               basic_machine=$basic_machine
                ;;
        c54x)
                basic_machine=tic54x-unknown

其余的是标准的configure / make / make安装。 下一步是正确配置crosstools-ng以构建所需的工具链。这是通过ct-ng menuconfig完成的。

虽然每个配置项都非常冗长,但我在这里添加了一个工作配置文件: http://pastebin.com/MhQKnhpN

可以导入并使用加载备用配置文件。最后ct-ng build在几分钟内构建一个新的 工具链。工具链在{HOME} / x-tools3中创建,如配置文件中所定义。要更改此设置,请更改'前缀目录' in' Path和misc options'。但是工具链也可以在构建后手动移动。

下一个问题/答案将展示如何使用此工具链为Raspberry Pi构建一个非常现代的Qt5。