专门用于交叉编译开源软件的方法

时间:2012-12-13 09:49:11

标签: linux open-source linux-kernel arm cross-compiling

我是这类公司的新手。我刚刚交叉编译Linux kernel。但是我有几个问题要问我必须知道哪些。

当我们编译Linux内核时,我正在使用这条命令,因为我的目标平台是ARM

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

我可以cross compile这样的任何Open Source软件,还是取决于软件支持的软件版本cross compilation

Linux内核源包含arch folder用于单独的体系结构,但gccgLibcbinutils没有,为什么?

但那些可以是cross-compiled任何人都可以告诉我为什么会发生这种行为吗?

根据要求,有cross-compile种不同软件的标准方法吗?如果任何一个精通此类业务,请带领我。

谢谢。

2 个答案:

答案 0 :(得分:2)

Linux内核有自己的,非常特殊的构建系统 - 不仅用于交叉编译 - 而且还有多个架构交叉编译。这就是存在一系列arch文件夹的原因。

大量(但并非全部)开源用户空间软件使用GNU autoconf来管理配置和构建过程。 autoconf的目的与内核构建脚本有些不同 - 它允许在各种各样的类似于UNIX的构建主机上构建软件,以用于同样多种构建目标。

autoconf可以用于交叉编译,只需要一些工作。这里有some hints 。原则上,构建过程需要知道:

  • 使用哪组工具(例如gcc,binutils)
  • 目标的标题和库已分阶段
  • 在何处安装最终产品。

gccbinutils稍微有点特殊,因为交叉工具与主机自己的工具一起安装在开发主机上。由于构建过程可能同时使用两者,因此选择工具完全由可执行搜索路径完成是站不住脚的。相反,跨工具以特定于目标的名称格式命名 - 例如

arm-linux-gnueabi-gcc

i686-apple-darwin11-llvm-gcc

答案 1 :(得分:2)

如果有配置,有一种在Linux中交叉编译软件的通用方法 脚本。

提取您要安装的软件包的源代码。

查看是否有任何配置脚本。

如果是,则运行 ./configure --help 找到编译支持的选项。

我通常使用以下命令进行交叉编译。

./ configure --host = arm-none-linux-eabi --prefix = / path / to / where / you / want / to / install

基于包可能需要提供其他选项。 示例如--with-out = libtiff等。

如果没有任何配置脚本,则调整到make文件。