Übergeben Sie nicht –build-id an den Linker von gcc

Lesezeit: 2 Minuten

Ich versuche, für einen eingebetteten Armprozessor zu kompilieren gcc-arm-linux-gnueabiUnd -nostdlib um die Abhängigkeiten von den C-Bibliotheken und Startdateien zu entfernen. Der Chip hat keine Möglichkeit, Elf-Dateien zu interpretieren, verwendet also objcopy -O binary, kann ich die Elf-Header daraus entfernen. Wenn ich jedoch die Build-ID drin lasse, hat die Binärdatei die Build-ID am Anfang der Ausgabe und kann daher nicht ausgeführt werden. Ich kann die Build-ID im Linker-Skript mit entfernen /DISCARD/ : { *(.note.gnu.build-id) *(.ARM.attributes) }aber dann warnt der Linker davor .note.gnu.build-id section discarded, --build-id ignored.. Während dies gut funktioniert und der Code auf dem Chip gut läuft, möchte ich die Build-ID nicht übergeben und dann löschen. Gibt es eine Möglichkeit zu belehren gcc um Befehle an den Linker zu übergeben, ohne sie ebenfalls zu übergeben --build-id?

  • Du kannst den … benutzen -Wl,<LINKER_OPTION> wenn Sie eine Linker-Option von übergeben möchten gcc. Das fragst du?

    – Tuxdude

    9. März 2013 um 22:02 Uhr

  • Die konnte man immer gebrauchen --remove-section Option zu objcopy sowie.

    – Café

    9. März 2013 um 22:11 Uhr

  • Oder Sie können die Build-ID an einer anderen Stelle als dem Start anbringen, wenn dies nützlich sein könnte.

    – tc.

    10. März 2013 um 17:30 Uhr

Benutzeravatar von Samuel Edwin Ward
Samuel Edwin Ward

Ich denke, diese Optionen werden tun, was Sie wollen:

-Wl,--build-id=none

Wenn Sie none für style übergeben, wird die Einstellung von allen –build-id-Optionen früher auf der Befehlszeile deaktiviert.

ld handbuch

  • Genial, danke – ich habe gesehen, dass die Hash-Typen sha1/md5 verfügbar waren, aber ich habe sie nicht entdeckt none.

    – David Holz

    10. März 2013 um 14:54 Uhr

Dies ist ein alter Beitrag, aber es lohnt sich, für die Nachwelt festzuhalten, dass Sie die Build-ID nicht verwerfen müssen. Alternativ können Sie es in einen anderen Flash-Bereich verschieben, indem Sie Ihr Linker-Skript bearbeiten.

Verschieben Sie einfach die Build-ID an eine Stelle hinter Ihrer Vektortabelle in Ihrem Textabschnitt:

    .text :
    {
        . = ALIGN(4);
        _stext = .;
        KEEP(*(.vectors .vectors.*))
        KEEP(*(.note.gnu.build-id))
        *(.text .text.*)
        *(.rodata .rodata*)
        . = ALIGN(4);
        _etext = .;
    } > rom

Dadurch bleibt Ihre Vektortabelle an der Adresse 0x0 (Ihre MCU erfordert dies wahrscheinlich), aber Sie können auch die Build-ID aus dem Code lesen, was sich als nützlich erweisen könnte!

  • Wenn Sie nach der Bereitstellung des Codes auf irgendeine Weise mit dem Gerät kommunizieren können, möchten Sie möglicherweise auch ein Symbol hinzufügen, das auf die Build-ID verweist, damit Sie es aus dem Code selbst lesen und zur Diagnose zurücksenden können. _build_id = . nach dem KEEP(*(.note.gnu.build-id))

    – Unsinn

    1. Oktober 2019 um 11:16 Uhr

1443870cookie-checkÜbergeben Sie nicht –build-id an den Linker von gcc

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy