Crosstool-NG制作GNU工具链

在说正事之前先讲下automake autoconf这一套东西。

目前在网上找到的开源工具之类的项目,绝大多数都可能在编译之前执行./configure

这个脚本后面可能会带各种各样的参数。如果就是针对本机进行编译还好,如果是进行交叉编译,可能还需要带各种各样的参数,提前设好各种路径的环境变量。

常见的例如:
--host=交叉gcc的前缀(就是host 工具链的名字)
--with-sysroot=目标文件系统根目录路径或者GCC 工具链里面提供的头文件和libc等库的路径。
--prefix 安装路径。
环境变量LIBS PKG_CONFIG_PATH 等。
需要引用交叉编译工具链,实现环境和编译上位机的隔离。防止在编译arm的应用时引用到x86linux 的库和环境 头文件。这样容易出现各种各样的编译错误。

需要注意的是,configure和Make file都是各个库和工具 的作者自己写的,有一定的规范习惯但是并没有标准,所以每个都不一样!!!

具体需要仔细查看help内容。

在./configure的时候,会检查当前的环境并生成MAKEFILE。如果是纯纯的应用交叉编译可能还好,如果是和target系统内核之类的相关的工具编译,那可能会太麻烦了。

在遇到问题的时候,需要检查config.log及生成的Makefile及编译过程中的log。

如果编译能够成功,并且可以运行。GOOD LUCK!


如果想尝试在板子里编译,但是板子里没有编译环境。
(这条路我最终也放弃了,因为板子里的环境实在是太乱,哪怕我有了C库 头文件和GCC,但是还是会缺少各种其他的库)。

可以使用Crosstool-ng制作编译工具。

值得注意的点

  1. ct-ng 是基于make的工具 ct-ng -h实际上是用了make -h 。所以要看真正的help 需要 ct-ng help
  2. 跟上面这个一样 在编译linux 源码的时候。看makefile 的help. 是make help
  3. 在menuconfig中配置工程路径,有tar source, build 路径, prefix三种要配置。分别对应工具拉取要编译的源码,编译过程中产生的文件,安装工具链的路径。
  4. 上面那个build路径不能命名为build, 否则ct-ng build会告诉你 build is up to date。他会以为你是去执行文件夹下编译而不是编译Makefile中的build
  5. Crosstool-NG网站的文档中有Toolchain Types这一节,讲了build target host 的关系。生成ARM->ARM这种编译器属于是cross-native类型,属于是加拿大类型的特例。加拿大类型是指build target host都不相同。
  6. 加拿大型制作工具链的策略是,先生成当前环境下的交叉工具链,再用交叉工具链生成host下编target的工具链。make之类的所谓伙伴工具也会编译出来,可以在menuconfig里勾选。
  7. 在实际操作中,发现如果有类似linaro的x86->arm交叉编译工具,似乎不在需要第一次编译交叉工具了,在加拿大型勾选后产生的HOST工具配置项中HOST名字那里填写交叉工具链的host名,(三个填空里的第一个,help里面会说 usually你会不会空着)。例如aarch64-none-linux-gnu。实际上就是gcc的前缀。
  8. 在Crosstool-NG里面他去获取源码包的路径是固定的,可能人家的源已经失效了(在糟糕的网络环境下经常发生).可以器github之类的上面看issue,可能有好心人给了tar的下载地址。然后可以手动下载到前面设置好的路径下。程序执行ct-ng source 或者ct-ng build就可以了。

猜你喜欢

转载自blog.csdn.net/kuno_y/article/details/128019169