我有一个工作交叉编译工具链,感谢crosstool-ng 🙂 – 但是,crosstool-ng是非常稀疏的文件,我是交叉编译新品。 具体的东道主和目标不是,我认为在这方面很重要。
我有一些关于目录结构的基本问题。 工具链被安装到一个以目标命名的目录中。 里面有一组目录:
arm-unknown-linux-gnueabi bin include lib libexec share
我认为这是针对实际的交叉编译器位,因为bin / do中的编译器正是为此目的而工作的。 请注意,有一个内部武装未知的linux的gnueabi /目录,即在那里的path是../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 /? 很显然,对于目标平台的本地支持库,所以我认为如果我正在构build这样一个库,我应该使用它作为--prefix
,尽pipe它与使用父目录相同,因为lib *是符号链接的…这个“在中间的目录”与一个bin和符号链接到sysroot是混乱。 我相信(一些)autotools风格的软件包可以configuration“–with-sysroot”。 那么 ,如果我看到它,那么它的意义是什么?它应该如何与其他选项(如–prefix等)相关联使用?
对于你的第一个问题 ,作为工具链安装目录:
他们是一样的,确实很难链接。
你可以通过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