This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5529:为什么不't ld 包含 crt0?

Guru**** 2589265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1206376/msp430f5529-why-doesn-t-ld-include-crt0

器件型号:MSP430F5529

我正在 Linux 上使用 gcc 来构建 MSP430代码。

我正在 使用 gcc 或 ld 链接和目标文件;现在 gcc 命令可以运行,但 ld 命令生成一个非常小的文件,其中不包括大部分代码,只包含一个子例程。 尤其是 crt0和同类不链接。

现在我可以看到,我在 gcc 中传递的选项与在 ld 中相同,但很明显 gcc 以与我不同的方式调用 ld。 特别是 gcc 命令:

msp430-elf-gcc -T /home/summers/msp430/include/msp430f5529.ld -L /home/summers/msp430/include -mmcu=MSP430F5529 -Wl,--gc-sections gcc/sin.o -o gcc/sin.out

和 ld 命令:

msp430-elf-ld -L /home/summers/msp430/include -T msp430f5529.ld --gc-sections gcc/sin.o -o gcc/sin2.out

那么、我在处理 ld 时有什么问题、例如、我还需要在其中做什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请勿直接使用 ld 链接 C 程序。 GCC 知道它要添加什么(并根据-mload 等选项在不同版本之间进行选择)。 要了解这一点,请在 gcc 版本中包含--verbose 选项。

    crtbegin、libraries、crtend 等

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的-可以看到 gcc 添加了很多东西。 我想知道 gcc 怎么知道这些事情,但世界没有。 感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    LD 只是一个链接器、可用于 C 程序以外的用途。  它按照您的要求执行。 不多也不少。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊是的-但 gcc 远比你所说的要多。 GCC 是如何知道这些东西的。

    我假定连接程序脚本描述目标器件的硬件布局、所以连接程序了解很多事情。 但是、我们猜猜我们这里说的是、链接脚本没有描述如何启动器件。 但 gcc 似乎知道,所以我不知道它从哪里读它。

    应该在图书馆里多挖掘一些。