crosstool-ng,目录结构和sysroot

时间:2013-02-09 20:39:43

标签: linux crosstool-ng

我有一个有效的交叉编译工具链,感谢crosstool-ng :) - 然而,crosstool-ng的文档很少,而且我是交叉编译的全新工具。我认为,具体的主持人和目标在这方面并不重要。

我对目录结构有一些基本的问题。工具链安装在以目标命名的目录中。里面是一组目录:

arm-unknown-linux-gnueabi
bin
include
lib
libexec
share

我认为这是针对实际的交叉编译器位,因为bin /中的编译器可以用于此目的。请注意,有一个内部arm-unknown-linux-gnueabi /目录,即其中的路径为../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi。在里面还有另一棵树:

bin
debug-root
include
lib
lib32
lib64
sysroot

lib *目录是sysroot /的符号链接。 bin中的东西似乎与父目录/ bin中的交叉编译工具集相同:

> bin/gcc -v
Using built-in specs.
COLLECT_GCC=./gcc
Target: arm-unknown-linux-gnueabi
Configured with: /usr/x-tool/.build/src/gcc-4.7.2/configure 
--build=x86_64-build_unknown-linux-gnu 
--host=x86_64-build_unknown-linux-gnu 
--target=arm-unknown-linux-gnueabi

所以我的第一个问题是:这些是为了什么?这个目录是什么?

我的第二个问题则是:sysroot /应该如何使用?它显然是针对目标平台本机的支持库,所以我认为如果我正在构建这样的库,我应该将其用作--prefix,尽管它与使用相同父目录,因为lib *是符号链接的...这个“中间的目录”有一个bin和符号链接到sysroot是令人困惑的。我相信(某些)autotools样式包可以配置“--with-sysroot”。 如果我看到了的重要性,那么它应该如何与其他选项(例如--prefix等)一起使用?

2 个答案:

答案 0 :(得分:3)

关于您的第一个问题,作为工具链安装目录:

  • 仓/臂未知-Linux的gnueabi-GCC
  • 臂未知-Linux的gnueabi / bin中/ GCC

它们是相同的,确实是硬链接。

您可以通过CC = arm-unknown-linux-gnueabi-gcc使用arm-unknown-linux-gnueabi-gcc,例如

export PATH=<toolchain installed dir>/bin:$PATH
CC=arm-unknown-linux-gnueabi-gcc ./configure 
make

export PATH=<toolchain installed dir>/arm-unknown-linux-gnueabi/bin:$PATH
./configure 
make

我总是使用第一种形式,我不确定后一种形式是否有效。

对于您的第二个问题,根据我的经验,您不需要关心sysroot。交叉编译器将自动在sysroot / usr / include中找到正确的C头文件。

除了您想要交叉编译一些库并将它们安装到sysroot中之外,您可以通过

获取它
export PATH=<toolchain installed dir>/bin:$PATH
CC=arm-unknown-linux-gnueabi-gcc ./configure --prefix=<toolchain installed dir>/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot
make
make install

答案 1 :(得分:0)

从Thomas Petazzoni的演讲Anatomy of Cross-Compilation Toolchains的38:39开始,演讲者深入介绍了输出目录的结构。