我首先从未找到的包含/库问题开始,因为这超出了正常的 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
剩下的是标准的配置/制作/制作安装。
下一步是正确配置 crosstools-ng 以构建所需的工具链。这是通过ct-ng menuconfig 完成的。
虽然每一个配置项都会非常冗长,所以我在这里添加了一个工作配置文件:
http://pastebin.com/MhQKnhpN
可以导入并使用加载备用配置文件。最后ct-ng build 在几分钟内构建了一个新的
工具链。工具链在 {HOME}/x-tools3 中创建,如配置文件中所定义。要更改此设置,请更改“路径和其他选项”中的“前缀目录”。但是工具链也可以在构建之后手动移动。
下一个问题/答案将展示如何使用此工具链为 Raspberry Pi 构建非常现代的 Qt5。