crosstool-ng,目录结构和sysroot

del*_*ver 5 linux crosstool-ng

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

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

arm-unknown-linux-gnueabi
bin
include
lib
libexec
share
Run Code Online (Sandbox Code Playgroud)

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

bin
debug-root
include
lib
lib32
lib64
sysroot
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

我的第二个问题是:sysroot /应该如何使用?它显然是针对目标平台本地的支持库,所以我假设我是否正在构建这样的库我应该使用它--prefix,尽管它与使用父目录相同,因为lib*是符号链接的...这个"中间目录"的bin和符号链接到sysroot是令人困惑的.我相信(某些)autotools样式包可以配置"--with-sysroot". 如果我看到它,那么它的意义是什么?它应该如何用于其他选项,如--prefix等?

Lik*_*ike 5

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

  • bin/arm-unknown-linux-gnueabi-gcc
  • arm-unknown-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
Run Code Online (Sandbox Code Playgroud)

或者

export PATH=<toolchain installed dir>/arm-unknown-linux-gnueabi/bin:$PATH
./configure 
make
Run Code Online (Sandbox Code Playgroud)

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

对于你的第二个问题,根据我的经验,你不需要关心 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
Run Code Online (Sandbox Code Playgroud)