我有一个可以工作的交叉编译器工具链,这要归功于交叉工具ng:)——然而,交叉工具ng的文档很少,我对交叉编译是全新的。我认为,在这种情况下,具体的东道国和目标并不重要。
我有一些关于目录结构的基本问题。工具链已安装到以目标命名的目录中。里面是一组目录:
arm-unknown-linux-gnueabi
bin
include
lib
libexec
share
我认为这是针对实际的交叉编译器位,因为bin/中的编译器确实是为此目的工作的。请注意,有一个内部arm未知的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等)一起使用?
对于您的第一个问题,作为工具链安装目录:
- bin/arm未知linux gneabi gcc
- arm未知linux gnueabi/bin/gcc
它们是相同的,确实是硬链接。
您可以通过CC=arm unknown linux gneabi gcc使用arm unknown-linux gneabi-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
从Thomas Petazzoni的讲座Anatomy of Cross Compilation Toolchains的38:39开始,演讲者深入介绍了输出目录结构。