至少Debian没有提供一个用于Raspberry Pi 1交叉开发的可用工具链。在撰写本文时,Linaro对于Qt5开发人员分支来说太老了。有一个项目跨库ng,它允许为各种系统轻松地构建自定义工具链。它支持一个比较现代的GCC 4.9.1。配置是一个尝试和错误,但主要的问题是,工具链没有找到所有的包含文件或库。如何配置交叉配置以使其可以用于编译Raspberry 1的Qt5?
关于Raspberry Pi如何准备使用这个工具链的后续工作,可以在这里找到:How do I prepare a Raspberry Pi with Raspbian so I can cross compile Qt5 programs from a Linux host?
发布于 2015-05-06 09:33:45
我首先从normal /library问题开始,因为这有点超出了常规的交叉工作台-ng安装/使用。
问题是,交叉测试正确地创建了gcc编译器,目标元组如下:arm供应商-linux-gnueabihf。这完全正确。但是,在没有供应商字符串:/lib/arm gnueabihf的文件夹中,包括和lib。看起来pkg-config处理不了这个问题。跨库-ng可能是正确的元组,但也是有点麻烦,拒绝添加一个函数来删除这个供应商字符串。允许修改元组和供应商字符串的交叉连接ng中的函数不是可选的。他们只是用一个新的名字创建象征性的链接,但元组是用GCC硬编码的。正确处理供应商字符串的唯一方法是修补跨库ng源。
因此,获得功能Raspberry Pi/Raspian 4.9.1工具链的第一步是克隆跨库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其余的是标准的配置/make/make。下一步是正确配置交叉工作台,以构建所需的工具链。这是用ct-ng menuconfig完成的。
尽管每个配置项都会非常冗长,所以我在这里添加了一个工作配置文件:http://pastebin.com/MhQKnhpN
可以导入它,并使用加载备用配置文件。最后,ct-ng build在几分钟内构建了一个新的工具链。在配置文件中定义的{HOME}/x 3中创建了工具链。若要更改此选项,请更改“Path和misc选项”中的“前缀目录”。但是工具链也可以在生成后手动移动。
下一个问题/答案将展示如何使用这个工具链为Raspberry构建一个非常现代的Qt5。
https://stackoverflow.com/questions/30072209
复制相似问题