`.примечание.gnu.свойство», на которое ссылается раздел `.текст», определенного в отброшенном разделе». примечание.gnu.свойство»

#gnu #ld

Вопрос:

У меня есть файлы port.cpp и port.h .

Код не имеет отношения к этому вопросу. Проблема, я полагаю, заключается в сценарии компоновщика.

Сценарий компоновщика содержит следующий код:

 ENTRY(loader)
OUTPUT_FORMAT(elf32-i386)
OUTPUT_ARCH(i386:i386)

SECTIONS
{
    . = 0x0100000;

    .text :
    {
        *(.multiboot)
        *(.text*)
        *(.rodata)
    }

    .data :
    {
        start_ctors = .;
        KEEP(*( .init_array ));
        KEEP(*(SORT_BY_INIT_PRIORITY( .init_array.* )));
        end_ctors = .;

        *(.data)
    }

    .bss :
    {
        *(.bss)
    }
    
    /DISCARD/ : 
    {
        *(.fini_array*)
        *(.comment)
    }   
}
 

И когда я запускаю ld с единственным флагом, -melf_i386 я получаю эту ошибку:

 `.note.gnu.property' referenced in section `.text' of port.o: defined in discarded section `.note.gnu.property' of port.o
 

Я считаю, что проблема в компоновщике, но даже после прочтения ld документации, просмотра создаваемого кода сборки и добавления KEEP(*( .note.gnu.property )); я не смог его исправить.