Linker 由objcopy创建的对象文件不兼容

Linker 由objcopy创建的对象文件不兼容,linker,binary,arm,ld,objcopy,Linker,Binary,Arm,Ld,Objcopy,我使用objcopy从二进制文件创建了一个对象文件,如下所示: objcopy -I binary -O elf32-little --rename-section .data=.text file.bin file.o 在其中一个链接器脚本部分中,我包含了以下内容以将该文件放入该部分: file.o (.text) 但我得到了以下错误: skipping incompatible file.o when searching for file.o error: ld returned 1

我使用objcopy从二进制文件创建了一个对象文件,如下所示:

objcopy -I binary -O elf32-little --rename-section .data=.text file.bin file.o
在其中一个链接器脚本部分中,我包含了以下内容以将该文件放入该部分:

file.o (.text)
但我得到了以下错误:

skipping incompatible file.o when searching for file.o

error: ld returned 1 exit status
我正在为arm微控制器开发,所以我相信文件格式“ELF32Little”是正确的

非常感谢您的帮助

##################################################################### 按照INCBIN路径更新:

我尝试了一种新的方法,虽然我已经取得了一些进展,但还没有完全实现

这是我的程序集文件:

            .section .text.audio_binary
            .global audio_start
    audio_start:
            .incbin "AudioData.bin"

            .global audio_start
    audio_end:
            .byte 0

        .global audio_size
audio_size:
        .int audio_start - audio_start
这是我得到的对象文件:

raw_audio_binary.o:     file format elf32-little

SYMBOL TABLE:
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .text.audio_binary 00000000 .text.audio_binary
00069a78 l       .text.audio_binary 00000000 audio_end
00000000 l       .text.audio_binary 00000000 $d
00000000 l    d  .ARM.attributes    00000000 .ARM.attributes
00000000 g       .text.audio_binary 00000000 audio_start
00069a79 g       .text.audio_binary 00000000 audio_size
这是我在链接器脚本中的部分:

    .text_Flash3 : ALIGN(4)
    {
       FILL(0xff)
        *(.text.$Flash3*)
        *(.text.$AUDIO*)        *(.rodata.$Flash3*)
        *(.text.audio_binary*) /* audio binary */      
        *(.rodata.$AUDIO*)    } > AUDIO
出于某种原因,链接器不会将数据放在此节(或任何其他节)中

你知道怎么了吗


如果这里出现了严重错误,我会提前道歉,因为我对链接器脚本不熟悉,所以仍然理解它们…

如果您有足够新版本的GAS,您可以使用以下命令从二进制输入文件创建对象文件:


如果您构建一个测试对象,几行asm,使用该工具链,objdump或readelf对elf32类型显示什么?它显示elf32 little,我已经检查了为不同的c源文件生成的对象。继续使用链接器方法,而不是像那样尝试后门。抱歉,我不太理解你的最后一条评论…我不是在尝试后门,我有一个二进制文件,其中包含音频数据,我需要在构建时放入flash中,如果您有更好的方法,请让我知道。感谢您的回答Florian,我已经尝试了INCBIN路径,但仍然存在问题,请查看我编辑的原始问题,其中包含了我所取得的进展。您可以尝试以
.rodata.
开头的节名吗
.text
可能会有一些非常特殊的处理,因为它是手臂。您如何确认该部分已消失?有链接错误吗?嗨Florian,我把这个音频数据对象放在一个spifi外部闪存中,在那个闪存中我没有一个名为“.rodata”的部分。我已经设法将一些代码移到了部分文本\u Flash3,在我完成构建后,我可以在内存摘要中看到几个KB放在那里,但不是音频的400Kb。或者你的意思是我应该尝试将音频二进制文件放在“.rodata.$audio”处?是的,使用
.rodata.$audio
或调整链接器脚本。在链接器保留数据之前,您可能还需要对数据的实际符号引用。
        .section .rodata
        .globl input_wav
input_wav:
        .incbin "input.wav"
        .globl input_wav_size
input_wav_size:
        .long . - input_wav