在说正事之前先讲下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制作编译工具。
值得注意的点
ct-ng -h
实际上是用了make -h
。所以要看真正的help 需要 ct-ng help
make help
tar source, build 路径, prefix
三种要配置。分别对应工具拉取要编译的源码,编译过程中产生的文件,安装工具链的路径。build路径
不能命名为build
, 否则ct-ng build
会告诉你 build is up to date
。他会以为你是去执行文件夹下编译而不是编译Makefile中的build
Crosstool-NG
网站的文档中有Toolchain Types
这一节,讲了build target host 的关系。生成ARM->ARM这种编译器属于是cross-native
类型,属于是加拿大类型的特例。加拿大类型是指build target host都不相同。make
之类的所谓伙伴工具也会编译出来,可以在menuconfig里勾选。aarch64-none-linux-gnu
。实际上就是gcc的前缀。ct-ng source
或者ct-ng build
就可以了。