是什么 ? | : | a cross-compilation toolchain generator which supports many architectures and components and has a simple yet powerful menuconfig-style interface. |
开发语言 | : | C |
官方主页 | : | http://crosstool-ng.github.io |
源码仓库 | : | https://github.com/crosstool-ng/crosstool-ng |
操作系统 | 包管理器 | 安装命令 |
---|---|---|
Windows | scoop | scoop install crosstool-ng |
Windows | Chocolatey | choco install -y crosstool-ng |
macOS | HomeBrew | brew install crosstool-ng |
GNU/Linux | HomeBrew | brew install crosstool-ng |
openSUSE | zypper | sudo zypper install -y crosstool-ng |
pacman | yay -Syyu --noconfirm |
ct-ng
本质上是一个Makefile,以make -rf $0
的方式自执行。因此,ct-ng
命令的使用格式与gmake完全一样。 只是ct-ng
提供了很多target
。
显示ct-ng
的使用帮助。
显示croostool-ng
的版本信息。
列出支持的交叉编译工具链
。
显示samples
的相关配置。
示例:
以samples
作为基准进行配置。
会在当前目录下生成.config
配置文件。
我们在此基础上进行简单配置,大大简化了我们的工作。
使用ncurses编写的界面进行配置。
示例:
显示当前配置的是什么交叉编译工具链
。
示例:
显示当前配置的大概信息。
示例:
下载用到的工具。
这个放在编译之前执行,这样能防止编译过程中网络不好出现中断。
查看下载好的源码包:
根据配置好的配置文件进行编译。
最终编译成功的产物在~/x-tools/x86_64-unknown-linux-gnu
目录中。
将~/x-tools/x86_64-unknown-linux-gnu/bin
加入PATH
环境变量中:
export PATH=~/x-tools/x86_64-unknown-linux-gnu/bin:$PATH
将~/x-tools/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot
用环境变量代替:
export X86_64_UNKNOWN_LINUX_GNU_SYSROOT=~/x-tools/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot
列出当前配置的编译步骤。
示例:
从某个步骤开始编译。当中途出错了之后,我们可以从断开处继续,而不必从头开始。
使用案例:没有使用任何的编译系统
(gmake、ninja),直接使用交叉编译器
去编译。
适用情形:学习或者是特别简单的程序。
1、编写一个简单的C源代码:
#include<stdio.h>
#include<math.h>
int main() {
printf("PI = %f\n", 4 * atan(1.0));
return 0;
}
2、直接使用交叉编译器
进行编译:
x86_64-unknown-linux-gnu-gcc -o xx xx.c -lm
使用案例:对只有Makefile,并且这个Makefile不需要用另外的工具 (configure
、autogen.sh
、CMake)生成的C工程进行编译。
示例案例:对tree进行交叉编译。
make CC=x86_64-unknown-linux-gnu
make install DESTDIR=/home/fpliu/heros
CC
用来指定交叉编译器
DESTDIR
用来指定安装路径,这个默认值为/usr
,这显然不符合实际情况,因为,既然是交叉编译, 就说明这个程序一定不是在当前系统中能运行的,肯定要放到另外一个平台下运行,一般的,我们要放到一个单独的文件夹中。
使用案例:对GNU-style
的C工程进行编译。
示例案例:对ncurses进行交叉编译。
./configure --host=x86_64-unknown-linux-gnu --prefix=/home/fpliu/heros
make
make install
--host
用来指定交叉编译器
--prefix
用来指定安装路径,这个默认值为/usr
,这显然不符合实际情况,因为,既然是交叉编译, 就说明这个程序一定不是在当前系统中能运行的,肯定要放到另外一个平台下运行,一般的,我们要放到一个单独的文件夹中。