我试图为arm(target=arm-linux-gnueabihf
)构建交叉编译器
来自GCC 4.6
源代码,带有选项-with-float=hard
。
我的编译过程在libgcc(unable to find /asm/errno.h file
)上失败,我想我使用了错误sysroot
配置选项:
--with-float=hard --with-mode=thumb --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-interwork --enable-multilib --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-bootstrap --disable-libgomp --disable-libsanitizer --enable-bootstrap=no --target=arm-linux-gnueabihf --with-sysroot=$sysroot --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16
$sysroot
它的本地sysroot / usr /
host
= Linux的x86_64的
是否有人知道如何根据gcc 4.6
构建arm hard float交叉编译器?
答案 0 :(得分:1)
构建交叉编译器比你想象的要复杂。有一个循环依赖,你不能在没有GLIBC的情况下构建GCC,并且你不能在没有GCC的情况下构建GLIBC。解决方案涉及构建编译器三次,GLIBC两次,每次启用的功能数量越来越多,很难解释。
如果您有一个现有的sysroot,那么事情会容易得多。假设sysroot包含头文件和二进制文件,循环中断,因此它应该正常工作。
除非它不那么容易:事情会随着时间的推移而发生变化,因此较旧的编译器很难在较新的sysroot中找到所需的文件(即使它们很可能存在)。您可能能够在4.6时代找到一个较旧的sysroot,但很可能会使用“softfp”ABI,因此它们不适用于您的HF编译器。
我建议使用类似Crosstool-ng的东西,这是一个尝试自动化流程的工具,并从源代码构建一个可用的交叉编译器和库。