gpt4 book ai didi

compiler-construction - LLVM 对 AVR 的支持如何适用于不同的语言?

转载 作者:行者123 更新时间:2023-12-02 15:47:13 26 4
gpt4 key购买 nike

提前致歉,因为我对这个主题还不太了解,并且仍在学习编译器的内部工作原理。

我目前正在研究在嵌入式系统中使用 D 的可能性,并发现了一个 article提到 AVR 后端如何合并到上游 LLVM 项目中,因此开发人员可以致力于为他们的语言创建 AVR 支持。D 有 LDC 编译器,它使用 LLVM 后端。不过,这篇文章还提到了 avr-gcc 的使用,这让我对在从 D 源代码到 AVR 二进制文件的哪个阶段使用了哪些工具感到有点困惑。我假设 LDC 将源代码转换为 LLVM IR,然后再转换为二进制,所以我不确定 avr-gcc 的用途。

谁能更详细地向我解释一下?

最佳答案

有两个选项可以链接 ldc 吐出的已编译目标文件:使用 avr-gcc 的链接器,或使用 llvm 的内部链接器。参数 -gcc=avr-gcc 告诉它在哪里可以找到 avr-gcc 工具,或者你可以使用 --link-internally 代替,它使用 llvm 的内置链接器.两者都可以。

使用 -gcc 的好处是你可以将它指向你的 arduino studio 安装——你可能想要它,因为它有 objcopy、avrdude 等程序以及其他有用的东西 - 让它正常工作,并更好地与其他库和工具等集成,例如 gcc 提供的 C 运行时。

$ PATH=/opt/arduino/arduino-1.8.10/hardware/tools/avr/bin:$PATH ldc2 -betterC -Oz -mtriple=avr -mcpu=atmega328p -gcc=avr-gcc delay.d
$ file delay
delay: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, with debug_info, not stripped
$ ls -l delay
-rwxr-xr-x 1 me users 2440 Sep 18 08:28 delay

使用 PATH 中的 arduino 工具,-gcc=avr-gcc 参数就可以了。

使用 --link-internally,您不需要任何这些,但是:

$ ldc2 -betterC -Oz -mtriple=avr -mcpu=atmega328p --link-internally delay.d
lld: warning: cannot find entry symbol _start; defaulting to 0x110B4
$ file delay
delay: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped
$ ls -l delay
-rwxr-xr-x 1 me users 708 Sep 18 08:31 delay

请注意它已链接,但它给出了有关缺少 _start 的警告。另请注意不同的文件大小。这是因为 gcc 提供的 C 运行时 stub 具有该开始符号,它会执行一些基本设置,然后调用您的 extern(C) main。否则,您将需要自己做更多的事情。我确定您也可以通过在链接命令中列出 lib/object 文件来让 l​​dc 链接到其中...但是使用 -avr-gcc,它就可以正常工作,因为它已经知道在哪里可以找到所有这些东西。

关于compiler-construction - LLVM 对 AVR 的支持如何适用于不同的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73713205/

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