Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 关于GNU链接器编辑器的问题;ld";?_Linux_Assembly_Gnu - Fatal编程技术网

Linux 关于GNU链接器编辑器的问题;ld";?

Linux 关于GNU链接器编辑器的问题;ld";?,linux,assembly,gnu,Linux,Assembly,Gnu,我有2个与GNU as组合的obj文件,它们是: a、 o:我的专业是什么 b、 o:一些实用函数 a、 o没有入口点。最后一个链接文件将被加载到内存中,执行将跳转到其最开始加载的地址,其中是a.o的第一个指令 现在我想把它们和GNULD连接起来。我想让a.o在最终文件中出现在b.o之前。我怎么能控制这一切?我是否必须创建一个自定义节并在链接器脚本中编写如下内容: SECTIONS { . = 0x7c00; .text : { *(.text) } .my_custom_sec

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

  • a、 o:我的专业是什么
  • b、 o:一些实用函数
a、 o没有入口点。最后一个链接文件将被加载到内存中,执行将跳转到其最开始加载的地址,其中是a.o的第一个指令

现在我想把它们和GNULD连接起来。我想让a.o在最终文件中出现在b.o之前。我怎么能控制这一切?我是否必须创建一个自定义节并在链接器脚本中编写如下内容:

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
ld b.o a.o -o final.bin
更新 这个问题有问题吗?我发错了吗?如果是这样,请让我知道,伙计们。非常感谢

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

如果我喜欢这个:

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
ld b.o a.o -o final.bin
a.o.的内容将出现在b.o.之前

如果我喜欢这个:

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
ld b.o a.o -o final.bin
否则的话


是否意味着要像这样进行控制?

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

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

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

根据:

引用文件的选项。。。相对于对象文件和其他文件选项,在命令行中显示选项的位置读取文件

因此,二进制文件的顺序就是它们在命令行上的显示顺序


因此,正如您在更新中所提到的,它是要被控制的。

谢谢R Samuel Klatchko。我昨晚读到这篇声明,当时我并不确定。谢谢你的确认,谢谢约书亚。这是一件我通常忽略的微妙的事情。