2014-02-11 6 views
5

ich eine Speicher Linker-Skript erstellt und gespeichert als memory.ld in der Eclipse-IDE-: Projekt: Eigenschaften: gcc-Linker: Sonstiges: hinzugefügt I -M -TWie löst man den Fehler im Linker-Skript?

memory.ld memory.ld:

MEMORY 
{ 
     ram (rw) : ORIGIN = 0x4000000 , LENGTH = 2M 
} 

SECTIONS 
{ 
    RAM : { *(.myvarloc) 

} > ram } 

In meinem c-Programm: habe ich eine globale Erklärung wie:

__attribute__ ((section(".myvarloc"))) 

uint8 measurements [30]; 

FEHLER:

/usr/bin/ld: FEBRUARY section `.text' will not fit in region `ram' 
/usr/bin/ld: region `ram' overflowed by 20018 bytes 
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': 
(.text+0x2b): undefined reference to `__init_array_end' 
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': 
(.text+0x31): undefined reference to `__init_array_start' 
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init': 
(.text+0x57): undefined reference to `__init_array_start' 
/usr/bin/ld: FEBRUARY: hidden symbol `__init_array_end' isn't defined 
/usr/bin/ld: final link failed: Bad value 
collect2: error: ld returned 1 exit status 
+0

Der Fehler betrifft '.text' /' ram' nicht '.myvarloc' Überlauf. – anishsane

+2

Ihr Linker-Skript muss wahrscheinlich dem Linker sagen, was mit dem Rest des Codes/Daten/etc zu tun, nicht nur, was mit dem .myvarloc Abschnitt – nos

+0

zu tun, vielen Dank für die Antwort. Könnten Sie mir bitte ein Beispiel geben ?? – user3252048

Antwort

1

Abhängig vom Compiler, den Sie verwenden (GCC?) Und dem Prozessor, für den Sie kompilieren (x86?), Generiert der Compiler mehrere Segmentverweise in den Objektdateien. Die häufigsten sind .text für Codesegmente, .data für initialisierte Daten und .bss für nicht initialisierte Daten. Sie können sehen, welche Segmente Ihr Compiler generiert, indem Sie das Dienstprogramm nm für Ihre Objektdateien verwenden.
Ich nehme an, dass, bis Sie Ihr eigenes Linker-Skript zur Verfügung gestellt haben, die Umgebung automatisch und/oder implizit ein Standard-Skript zur Verfügung gestellt hat. Aber jetzt, wo Sie sich entschieden haben, "selbst zu rollen", müssen Sie sich selbst um alle Details kümmern.

ich die Details nicht überprüfen können, aber man konnte mit den folgenden Abschnitten beginnen:

SECTIONS 
{ 
    .bss : { *(.myvarloc) } 
    .bss : { *(.bss) } 
    .data : { *(.data) } 
    .text : { *(.text) } 
} 

Ich bin mir nicht sicher, ob dies die genaue Syntax Linker Ihrer GCC ist (es hängt ein wenig von der Version), aber Sie können weitere Informationen in the manual finden.