Forum: Compiler & IDEs GCC Linker Fehler


von Tim B. (larzarus)


Lesenswert?

Guten Tag,

ich habe Eclipse nun eingerichtet, nach dieser Anleitung
http://www.mikrocontroller.net/articles/MSP430_eclipse_helios_mspgcc4_gdb-proxy.
Folgendes Bild konnte ich nicht lesen:
http://www.mikrocontroller.net/articles/Datei:Msp430_eclipse_mspgcc4_gdbproxy_7.jpg

Nun bekomme ich diese Fehlermeldung:
 /mspgcc/bin/../lib/gcc/msp430/4.5.3/../../../../msp430/bin/ld.exe: 
cannot open linker script file memory.x: No such file or directory



Ich finde leider nichts im Netz dazu, kann mir jemand helfen?
vielleicht eine Pfadangabe falsch?
Die Dateien sind hier zu finden mspgcc\msp430\lib\ldscripts

Ich verwende msp430x11x1 in den Einstellungen, da ich leider nicht weiß 
welchen ich besitze.

mspgcc\msp430\lib\ldscripts hier ist dieser Chip nicht zu finden.

Bitte ich rätsele seit 2 Tagen dran rum :-( total frustrierend

von hp-freund (Gast)


Lesenswert?

Befindet sich eine memory.x Datei in deinem System?

Wenn nicht, sieh mal hier:
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Devel:git

da steht:

Note that binutils no longer includes memory-map or peripheral address 
information for any MSP430 chips; the msp430mcu package, or hand-crafted 
memory.x and periph.x files are required to link an executable.

Hast dann wohl das msp430mcu package nicht installiert. Siehe link...

von Tim B. (larzarus)


Lesenswert?

Ja also hier sind ganz viele Ornder in denen siche solche Dateien 
befinden.
mspgcc\msp430\lib\ldscripts

Ich habe doch MSPGCC installiert, muss ich dieses Package dann noch 
extra installieren?
mmmhh....:-(

Danke schon mal

von hp-freund (Gast)


Lesenswert?

Wenn Du die Dateien schon hast, solltest Du zum Test mal einen konkreten 
Controllernamen vergeben. Das könnte bewirken das dadurch der richtige 
Ordner inkludiert wird.

z.B. msp430f1101

von Tim B. (larzarus)


Lesenswert?

Also ich habe den
#include  <msp430x11x1.h>
im C-Code

In den Build Properties habe ich es so angegeben:-mmcu=msp430x11x1

Passt das nicht?

von hp-freund (Gast)


Lesenswert?

Ich würde meinen das das x jeweils für einen Platzhalter steht.
Probier mal meinen Vorschlag.

von Tim B. (larzarus)


Lesenswert?

Mach ich morgen muss noch was anderen erledigen :-D FPGAs
Danke werde morgen berichten ;-)

von Andreas B. (andreas_b77)


Lesenswert?

hp-freund schrieb:
> Ich würde meinen das das x jeweils für einen Platzhalter steht.

Nein, .x ist die Dateiendung für Linker-Skripte in der GNU Toolchain. 
Warum die MSPGCC Installation die nicht findet weiß ich nicht, auf jeden 
Fall braucht der Linker eine sonst weiß er nicht was er tun soll, 
deshalb der Fehler.

von hp-freund (Gast)


Lesenswert?

Es ging aber um die x in -mmcu=msp430x11x1.
Wobei das Erste ein C oder F und das Zweite 0,1 oder 2 sein kann.

Eine Liste der vom gcc unterstützten Controller gibt der Aufruf mit 
Parameter : --target-help

von Tim B. (larzarus)


Lesenswert?

Hallo ich habe nun die Bezeichnung im Code und in den Preferences 
geändert auf MSP430f1111, aber leider ist der Fehler immer noch da.
Weiß jemand rat?

Muss ich in den Preferences die Libraries angeben oder so?

von hp-freund (Gast)


Lesenswert?

Hallo,

versuch es mal mit Kleinschreibung: msp430f1111

An sonsten muss irgendwie der Suchpfad:
mspgcc\msp430\lib\ldscripts\msp430f1111\
erreichbar sein.

In diesem Bild:
http://www.mikrocontroller.net/articles/Datei:Msp430_eclipse_mspgcc4_gdbproxy_13.jpg
kannst Du die Einstellungen sehen und für den Linker dann mal prüfen.

von Tim B. (larzarus)


Lesenswert?

Passt alles, klein geschrieben ist es auch:-(

von hp-freund (Gast)


Lesenswert?

Kopier doch einfach mal die passenden memory.x und periph.x aus dem 
msp430f1111-Ordner in dein Projektverzeichnis.
Der sollte dann im Suchpfad sein.

von Roland H. (batchman)


Lesenswert?

Versuche mal, das "linker script" mittels -T dem Linker mitzugeben:
1
       -T scriptfile
2
       --script=scriptfile
3
           Use scriptfile as the linker script.  This script replaces ld’s
4
           default linker script (rather than adding to it), so commandfile
5
           must specify everything necessary to describe the output file.
6
           If scriptfile does not exist in the current directory, "ld" looks
7
           for it in the directories specified by any preceding -L options.

von Tim B. (larzarus)


Lesenswert?

Wie mitgeben?
Wo mache ich das?

von hp-freund (Gast)


Lesenswert?

Hast Du die Dateien in das Projektverzeichnis kopiert?

Tim Barl schrieb:
> Wie mitgeben?
> Wo mache ich das?

Das meinte ich vorhin mit überprüfen der Linker Einstellungen.
Unter MinGW C Linker -> General kannst Du das Linkfile auswählen, aber 
nur eins.
Script File (-T)

von Roland H. (batchman)


Lesenswert?

Tim Barl schrieb:
> Wie mitgeben?
> Wo mache ich das?

Wie das in Eclipse gemacht wird, weiß ich nicht.

Bei mir ist es der letzte Schritt im Makefile, und das Resultat sieht so 
aus:
1
msp430-gcc -save-temps -mmcu=msp430g2553 -T ../../linker-scripts/msp430.x -L ../../linker-scripts -Wl,-Map=build/xxx.map,--cref -Wl,--gc-sections -o build/xxx.elf build/a.o  build/b.o build/xxx.o

von heinz-m (Gast)


Lesenswert?

Tim Barl schrieb:
> Nun bekomme ich diese Fehlermeldung:
>  /mspgcc/bin/../lib/gcc/msp430/4.5.3/../../../../msp430/bin/ld.exe:
> cannot open linker script file memory.x: No such file or directory

Hatte das selbe Problem und es hat mich einige Stunden gekostet.
Die Ursache war bei mir, dass in Eclipse in den Projektsettings unter 
C/C++ Build->Settings->Tool Settings->Cross Settings der Pfad 
C:\Programm Files\mspgcc\bin als Basispfad eingetragen war. Der ist zwar 
korrekt, aber Eclipse nimmt diesen Pfad als Basis um den Pfad zur 
memory.x zusammenzubauen und kommt dabei mit dem Leerzeichen zwischen 
"Program Files" nicht klar. Leider geht das aus der Fehlermeldung nicht 
hervor....

Ich habe C:\Programme... eingetragen und jetzt läuft alles...

Gruß
Heinz

von Tim Barl (Gast)


Lesenswert?

Danke dafür:D auch wenn es spät kommt ;)

von Hendi (Gast)


Lesenswert?

Mir hat es geholfen ;). Allerdings war es bei mir die globale PATH 
Variable unter Windows.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

heinz-m schrieb:
> Die Ursache war bei mir, dass in Eclipse in den Projektsettings unter
> C/C++ Build->Settings->Tool Settings->Cross Settings der Pfad
> C:\Programm Files\mspgcc\bin als Basispfad eingetragen war. Der ist zwar
> korrekt

Schmeisst Eclipse die Anführungszeichen weg, die man um solche 
Pfadangaben herum machen sollte?

von Davide T. (Firma: Polytechnic of Turin) (dadomgilmour) Flattr this


Lesenswert?

Hi Leute,

ich weiß, dass dieses Thema sehr alt ist aber schreibe die Antwort für 
die Leute, die noch dafür interessiert sind ;)

Das Problem ist sehr einfach: Wenn der Linker aufgerufen wurde, ist der 
aktuelle Ordner nicht der richtige. So muss man im GCC Compiler 
spezifizieren, wo das Script ist. Das kann mit der -L Option gemacht 
werden.

Ich kopiere hier meine Makefile Datei:

# Require DEVICE to be specified
DEVICE          := MSP430F2274
EXAMPLE    := msp430x22x4_1
SOURCE_PATH   := $(HOMEDRIVE)/TI/workspace/prova
RELEASE_PATH   := $(SOURCE_PATH)/Debug

################## GCC Root Variable ###################
GCC_DIR       := $(HOMEDRIVE)/TI/msp430_gcc
GCC_MSP_INC_DIR := $(GCC_DIR)/include
LDDIR         := $(GCC_MSP_INC_DIR)/$(DEVICE)
######################################
GCC_BIN_DIR     := $(GCC_DIR)/bin
######################################
CC              := $(GCC_BIN_DIR)/msp430-elf-gcc
GDB    := $(GCC_BIN_DIR)/msp430-elf-gdb
######################################
CFLAGS          := -O2 -D__$(DEVICE)__ -mmcu=$(DEVICE) -g 
-ffunction-sections -fdata-sections -DDEPRECATED
LDFLAGS         := -T $(LDDIR).ld -mmcu=$(DEVICE) -g -Wl,--gc-sections 
-L $(GCC_MSP_INC_DIR)
INCLUDES        := -I $(GCC_MSP_INC_DIR)
######################################
SRC             := $(SOURCE_PATH)/$(EXAMPLE).c
EXOBJECT        := $(RELEASE_PATH)/$(EXAMPLE).o
EXOUTPUT        := $(RELEASE_PATH)/$(EXAMPLE).out
######################################

all: $(SRC)
  @echo ============================================
  @echo Compiling $(EXAMPLE).c
  @echo ============================================
  $(CC) $(INCLUDES) $(CFLAGS) -c $< -o $(EXOBJECT)
  @echo ============================================
  @echo Linking objects and generating output binary
  @echo ============================================
  $(CC) $(LDFLAGS) $(EXOBJECT) -o $(EXOUTPUT)

clean:
  @echo ============================================
  @echo Project cleared
  @echo ============================================
  @rm $(RELEASE_PATH)/$(EXAMPLE).o
  @rm $(RELEASE_PATH)/$(EXAMPLE).out


Viel Spaß
Ciao
Dado ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.