我有一个有效的交叉编译工具链,感谢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等)一起使用?
答案 0 :(得分:3)
关于您的第一个问题,作为工具链安装目录:
它们是相同的,确实是硬链接。
您可以通过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开始,演讲者深入介绍了输出目录的结构。