gpt4 book ai didi

c - 为什么要为链接器指定目标架构?

转载 作者:行者123 更新时间:2023-11-30 16:12:21 25 4
gpt4 key购买 nike

我一直致力于在嵌入式项目中使用 Meson 构建系统。由于我在嵌入式平台上工作,因此我编写了自定义链接器脚本以及链接器的调用。直到我尝试将 newlib 链接到我的项目时,我才开始遇到链接问题。就在我开始工作之前,最后一个错误是对 main 的 undefined reference ,我知道它显然在项目中。

出于偶然,我尝试将 -mcpu=cortex-m4 添加到我的链接器调用中(我使用 gcc 进行链接,我被告知这是非常典型的直接调用ld)。有效!现在,我唯一的问题是“为什么”?

也许我遗漏了一些关于链接过程实际如何工作的信息,但考虑到我只是生成一个 ELF 文件,我认为为链接器指定 CPU 架构并不重要。这是 newlib 的事情,还是 gcc 只是在幕后为我创造了我以前从未见过的魔法?

仅供引用,here's my project (不完整)

最佳答案

一般来说,您应该始终通过编译器驱动程序进行链接(gcc 命令的链接形式),而不是通过直接调用 ld。如果您正在特定的精确目标上进行裸机开发,则可以确定所需的链接器参数集并直接使用 ld,但编译器驱动程序会为您处理很多事情,通常最好是让它发生。 (如果您没有单一的固定目标,则可能性的组合是无限的,您无法重现某人可能关心的所有当前和 future 的目标。)

您仍然可以将任何您喜欢的选项传递给链接器,例如自定义链接器脚本,通过 -Wl,... 选项形式。

至于为什么特定的目标架构 ISA 级别可能对链接很重要,链接并不是将二进制 block 粘在一起的愚蠢过程。链接可能涉及修补(重定位)甚至生成(远程跳转目标的重击等)代码,在这种情况下,链接器可能需要关心它所针对的特定 ISA 级别/变体。

关于c - 为什么要为链接器指定目标架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58356951/

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