gpt4 book ai didi

c - 利用 LLVM 的半路交叉编译 - 在 Raspberry Pi 上编译更快

转载 作者:太空狗 更新时间:2023-10-29 16:12:31 24 4
gpt4 key购买 nike

Raspberry Pi 需要花费大量时间来编译 C 代码。我想加速编译。但是我得到一个编译错误。

要做到这一点,并且因为我已经在我的 PC 上编写代码,所以我想使用我的 PC,我想使用 LLVM(与 cygwin 一起提供)来生成可执行文件的 LLVM 汇编语言版本。然后,将其发送到 Raspberry Pi 以最终转换为 native (ARM) 可执行文件。

我希望更快地获得可执行文件,因为我可以在链接 (llvm-link) 之前在我的多核机器上将我的代码并行编译为 LLVM 语言。我希望 Raspberry Pi 本身的最后一步,将 LLVM 语言转换为可执行二进制文件会很短。

让我们来看一个示例代码:

#include <stdio.h>

int main(){
printf("0");
return 0;
}

然后在我的电脑上运行

clang a.c -emit-llvm -S

这会生成一个名为 a.s 的 .c 文件的 LLVM 语言版本的文件

然后,我将 a.s 发送到 Raspberry Pi 并在其上运行命令 llc -filetype=obj a.s 以生成 a.s.o 一个目标文件。

但是当我想从这个目标文件在 Rasp Pi 上创建一个可执行文件时,我得到一个错误:

clang a.s.o -o a.out
/usr/bin/ld: error: a.out uses VFP register arguments, a.s.o does not
/usr/bin/ld: failed to merge target specific data of file a.s.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我尝试在最后一步使用以下标志 -marm -mfloat-abi=hard -mfpu=vfpclang 但失败并出现相同的错误。您知道如何解决此错误或有一些建议可以帮助我使用 LLVM 加快编译过程吗?

提前致谢

最佳答案

LLVM IR 不可移植。它包含各种特定于您的机器的东西(是 int 32 位或 64 位、sizeof 和调用约定)。为了让它工作,你需要传递 clang 参数,就像你在做一个完整的交叉编译一样。在这一点上,因为 clang 是一个完整的交叉编译器,你还不如只编译目标文件。

因此,在您的电脑上使用 clang -target armv6-linux-gnueabi -integrated-as -marm -mfloat-abi=hard -mfpu=vfpu -c 编译目标文件,然后在 pi 上使用链接ld.

编辑:

既然你提到 cygwin clang 集成汇编器不起作用,最好的选择是输出 arm 汇编:clang -target armv6-linux-gnueabi -marm -mfloat-abi=hard -mfpu=vfpu -S

关于c - 利用 LLVM 的半路交叉编译 - 在 Raspberry Pi 上编译更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com