关于 GNU 链接器编辑器“ld”的问题吗?

发布于 2024-09-17 09:16:09 字数 754 浏览 8 评论 0原文

我有 2 个用 GNU as 组装的 obj 文件,它们是:

  • ao :我的主要程序
  • b.o :一些实用函数

a.o 没有入口点。最终链接的文件将被加载到内存中,执行将跳转到其最开始加载的地址,其中是 ao 的第一条指令

。现在我想用 GNU ld 将它们链接在一起。我想让 ao 在最终文件中出现在 bo 之前。我怎样才能控制这个?我是否必须创建一个自定义部分并在链接器脚本中编写如下内容:

SECTIONS
{
  . = 0x7c00;
  .text : { *(.text) }
  .my_custom_section : { *(.my_custom_section) }
  .data : { *(.data) }
  .bss  : { *(.bss) }
}

OUTPUT_FORMAT(binary)

更新

这个问题有问题吗?难道是我发错帖了?如果是这样,请告诉我,伙计们。非常感谢。

目前,我发现输入文件的命令行序列似乎是相关的。

如果我这样做:

ld a.o b.o -o final.bin

ao 的内容将出现在 bo 之前

如果我这样做:

ld b.o a.o -o final.bin

则不然。

难道意味着要这样被控制吗?

I have 2 obj files assembled with GNU as, they are:

  • a.o : my major program
  • b.o : some utility functions

a.o doesn't have an entry point. The final linked file will be loaded into memory and the execution will jump to its very beginning loaded address, where is the first instrucion of a.o.

Now I want to link them together with GNU ld. And I want to make a.o appear before b.o in the final file. How could I control this? Do I have to make a custom section and write in the linker script like this:

SECTIONS
{
  . = 0x7c00;
  .text : { *(.text) }
  .my_custom_section : { *(.my_custom_section) }
  .data : { *(.data) }
  .bss  : { *(.bss) }
}

OUTPUT_FORMAT(binary)

Update

Is there something wrong with this question? Did I post it wrong? If so, please let me know, guys. Many thanks.

Currently, I found that the command line sequence of the input files seems to be relevant.

If I do like this:

ld a.o b.o -o final.bin

Content from a.o will appear before b.o.

If I do like this:

ld b.o a.o -o final.bin

It will be otherwise.

Is it meant to be controlled like this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

素年丶 2024-09-24 09:16:09

根据手册

引用文件的选项...导致在选项出现在命令行中时读取文件,相对于目标文件和其他文件选项

因此二进制文件中文件的顺序就是它们的顺序出现在命令行上。

因此,正如您在更新中提到的那样,它意味着受到控制。

According to the manual:

options which refer to files ... cause the file to be read at the point at which the option appears in the command line, relative to the object files and other file options

So the order of files in the binary is the order in which they appear on the command line.

Therefore, it is meant to be controlled as you mention in your update.

妖妓 2024-09-24 09:16:09

ld 的操作顺序实际上是相关的。

除非以某种方式明确说明,否则入口点是列表中第一个文件的第一个代码字节。

生成的可执行文件始终包含按调用顺序排列的 .o 文件的内容。 (使用 .a 文件会变得复杂)。

The order of operations to ld is in fact relevant.

Unless explicitly stated somehow, the entry point is the first code byte of the first file on the list.

The resulting executable always has the contents of the .o files in invocation order. (with .a files it gets complicated).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文