crosstool-ng工具
crosstool-ng 是为了帮助你完成生成编译器工具链这样复杂任务而设计的,它提供了一个功能强大的前端与构建脚本,可以让你选择需要让工具链完成的功能,然后自动生成,而这个过程中你并不需要去确切的了解这些无数工具链是如何组织在一起的。
需要用到的组件:
libstdc (标准C++库, 包括共享静态库)
libtool和make (用于基础构建)
GNU MP (用于高效精确数学计算)
gperf (一个完美的哈希函数发生器)
bison (C语法解析器)
flex (词法模式识别引擎)
ncurses (终端图形库)
sed (流编辑器)
subversion (访问SVN代码库的客户端工具)
texinfo (一个文档生成和解析工具)
ubuntu 安装组件:
sudo apt install gcc g++ bison make ncurses-dev texinfo flex fperf libtool sed subversion libgmp-dev libstdc++-dev
注意: 以上的库名会发生改变
下载crosstool-ng
进入crosstool-ng目录:
./configure --prefix=/opt/crosstool-ng
make
make install
配置交叉编译工具
注意: 你可以使用crosstool-ng工具目录下samples文件夹里的 armv6-rpi-linux-gnueabi里的crosstool.config
ct-ng menuconfig
路径和其他选项(Paths and Misc Options)
启用 “Try features marked as EXPERIMENTAL”
将 “Prefix directory"设置成你希望的交叉编译工具链的安装位置。
设置"Number of parallel jobs” 用以设置make时 -j的参数
目标选项(Target Options)
注意: arm1176jzf-s是树莓派zero CPU的型号,具体可百度寻找树莓派图谱。
设置"Architecture level" 可以采用samples里的默认的
设置Eitherassembly for CPU 为 arm1176jzf-s
设置 Tune for CPU 为 arm1176jzf-s
设置 Use specific FPU 为 vfp
设置 Floating point 为 hardware(FPU)
设置 Default instruction set mode 为 arm
启用 Use EABI 选项
工具链选项(Toolchain Options)
设置 Tuple’s vendor string 为 rpi
操作系统选项(Operating System Options)
设置 Target OS 为 linux
设置 LInux kernel version 内核版本
二进制实用工具选项(Binary Utilities Options)
设置 Binary format 为 ELF
设置 binutils version
C编译器选项(C Compiler Options)
启用 Show linaro versions
设置 gcc version 为 新版本可定制
启用c++
设置 gcc extra config 为 --with-float=hard
启用 Link libstdc++ statically into gcc binary
C库选项(C-library Options)
设置 C library 为 eglibc
设置 eglibc version
然后退出保存.
开始构建
ct-ng build
注意: 目前本人制作的交叉编译工具,编译qt源码不成功,具体问题是工具链缺少了东西。如需交叉编译qt源码个人推荐还是用linaro的因为官方提供的交叉编译工具链太旧了。