Meine Anwendung ruft einige Funktionen auf, die in einer externen statischen Bibliothek abgelegt sind. Ich verbinde die externe statische Bibliothek mit meiner Anwendung und alles funktioniert (in diesem Fall verwende ich GCC).Platzieren Sie Segmente der externen statischen Bibliothek an bestimmten Positionen.
Trotzdem werden die Positionen (Adressen) der Text-, .data- und .bss-Abschnitte der Bibliothek vom Linker ausgewählt. Ich kann ihre Speicherorte auswählen/ändern, indem ich das Linker-Skript modifiziere, aber es ist mühsam, da ich alle Funktionen, Variablen usw. der Bibliothek angeben muss. Was ich meine, ist es so etwas wie:
. = 0x1000; /* new location */
KEEP(*(.text.library_function1));
KEEP(*(.text.library_function2));
[...]
Eine alternative Lösung, indem ein für jede Funktion/Variable Attribut Abschnitt der externe Bibliothek zu bauen, und dann den Linker zu modifizieren, indem den gesamten Abschnitt erneut zu lokalisieren. Etwas wie:
/* C source file */
unsigned char __attribute__((section (".myLibrarySection"))) variable1[10];
unsigned char __attribute__((section (".myLibrarySection"))) variable2[10];
/* Linker script */
. = 0x1000;
KEEP(*(.myLibrarySection))
Allerdings würde Ich mag Lage sein, ganze .text zu verlagern, .data und .bss Segmente einer externen statischen Bibliothek, ohne dass diese Tricks.
würde ich so etwas wie dies mag (in Linker-Skript):
. = 0x1000;
KEEP(*(.text.library_file_name))
Ist es möglich, GCC Toolchain verwendet?
Können andere Werkzeugketten (IAR, Keil usw.) verwendet werden?