gcc clang交叉编译-sysroot需要交叉编译器吗?还是目标arch编译器?

xytpbqjk  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(309)

我尝试使用llvm / clang在主机x64上为目标arm进行交叉编译。我知道需要sysroot和gcc-toolchain,它们的标志指向目标平台的gcc编译器。
我很困惑gcc工具链是否应该在目标拱门上运行?或者应该是一个交叉工具链,可以在主机架构上运行,但可以为目标架构编译?
我交叉编译了一个简单的hello world,使用了一个目标arch gcc工具链作为sysroot。但是,必须使用llvm lld进行链接。我相信这可能与无法运行提供ld的gcc工具链有关。

am46iovg

am46iovg1#

GCC是一个编译器,clang是另一个编译器。你只需要两个中的一个。您可以使用GNUbinutils来链接编译器的输出,但这不是GCC。
无论在交叉编译期间运行什么程序,都必须为构建系统(x64)构建,并配置为允许针对目标系统(ARM)。
P.S.也许你应该看看我的项目:https://github.com/DavidEGrayson/nixcrpkgs。它展示了如何使用GCC(而不是clang)在x64 Linux上为ARM Linux进行交叉编译。

to94eoyn

to94eoyn2#

--sysroot不使用指定位置的编译器。(我不认为它在那里使用任何可执行文件。)它主要使用头文件和库。
我不确定它是否会在默认情况下尝试使用sysroot中的链接器,但如果您使用-fuse-ld=lld,这就没关系了。LLD似乎可以连接大多数常见的平台。
例如,我正在使用从Windows复制的MinGW sysroot从Linux交叉编译到Windows(因此其中的可执行文件都不能在Windows上运行),Clang对此没有问题。

相关问题