Forum: Compiler & IDEs Probleme beim linken mit Codesourcery + Eclipse + EK-LM3S8962


von Pablo (Gast)


Lesenswert?

Hallo

ich versuche schon seit Tagen die folgende Fehlermeldung auf meinen 
HelloWorld Projekt zu beseitigen aber bis jetzt ohne Erfolg:

'Building target: HelloWorld.elf'
'Invoking: ARM Sourcery Windows GCC C Linker'
arm-none-eabi-gcc 
-T"D:\Microcontroladores\Beispiele\Luminary\HelloWorld\hello.ld" 
-nostartfiles -L"C:\Program Files\StellarisWare\driverlib\gcc" 
-Wl,-Map,HelloWorld.map -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 
-o"HelloWorld.elf"  ./hello.o ./startup_gcc.o
./hello.o: In function `main':
D:\Microcontroladores\Beispiele\Luminary\HelloWorld\Debug/../hello.c:66: 
undefined reference to `SysCtlClockSet'
D:\Microcontroladores\Beispiele\Luminary\HelloWorld\Debug/../hello.c:71: 
undefined reference to `RIT128x96x4Init'
D:\Microcontroladores\Beispiele\Luminary\HelloWorld\Debug/../hello.c:76: 
undefined reference to `RIT128x96x4StringDraw'
collect2: ld returned 1 exit status
cs-make: *** [HelloWorld.elf] Error 1

Ich konnte ein erstes Beispiel (Blinky.c) compilieren und linken aber 
beim 2 Beispiel ist die obere Fehlermeldung aufgetaucht. Eclipse 
generiert das Makefile selber. Ich habe alle Links mehrmals geprüft und 
erscheinen in Ordnung zu sein. Mein Gefühl nach, den Compiler findet die 
Library libdriver von Luminary nicht, obwohl den Pfad unter "settings" 
--> Arm Sourcery Windows GCC C Linker --> Libraries unter Library search 
path (-L) als "C:\Program Files\StellarisWare\driverlib\gcc eingegeben 
ist.
Kann mir jemand ein Tip geben? Ich wäre sehr dankbar.
Schöne Grüsse aus Argentinien
Pablo

von ./. (Gast)


Lesenswert?

Pablo schrieb:
> C:\Program Files\StellarisWare\driverlib\gcc

Leerzeichen in Pfaden waren, egal ob prinzipiell unterstützt oder nicht,
schon immer eine gaaaanz schlechte Idee.

Installier den Kram doch mal woanders hin.

von Pablo (Gast)


Lesenswert?

Hallo

besten Dank für die Antwort. In wirklichkeit ist die StellarisWare unter 
C:\Programme\StellarisWare\driverlib\gcc gespeichert. Ich weiss es nicht 
genau, warum den Compiler den Pfad mit C:\Program Files... übernohmen 
hat. Ich habe den Pfad geändert und erhielt die gleiche Fehlermeldung.

Irgendeine andere Idee?

Pablo

von Pablo (Gast)


Lesenswert?

Hallo

ich habe inzwischen die StellarisWare woanders installiert (ohne 
Leerzeichen) aber den Fehler bleibt.

Irgendeine Idee??

Pablo

von Oliver (Gast)


Lesenswert?

Pablo schrieb:
> Mein Gefühl nach, den Compiler findet die
> Library libdriver von Luminary nicht, obwohl den Pfad unter "settings"
> --> Arm Sourcery Windows GCC C Linker --> Libraries unter Library search
> path (-L) als "C:\Program Files\StellarisWare\driverlib\gcc eingegeben
> ist.

Den Pfad angeben reicht nicht, du musst schon noch die lib selber 
angeben. Davon ist in dem Linkeraufruf nichts zu sehen.

Olilver

von Pablo (Gast)


Lesenswert?

Hallo

Vielen Dank für deine Antwort.

Ich habe den Pfad mit dem Datei libdriver.a angegeben und zwar unter 
"settings"--> Libraries(-l). Jetzt der Linker gib mir einen neuen 
Fehler:

'Building target: HelloWorld.elf'
'Invoking: ARM Sourcery Windows GCC C Linker'
arm-none-eabi-gcc 
-T"D:\Microcontroladores\Beispiele\Luminary\HelloWorld\hello.ld" 
-nostartfiles -L"D:\Microcontroladores\StellarisWare\driverlib\gcc" 
-Wl,-Map,HelloWorld.map -ldriver -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 
-o  "HelloWorld.elf"  ./hello.o ./startup_gcc.o 
-l"D:/Microcontroladores/StellarisWare/driverlib/gcc/libdriver.a"
c:/program files (x86)/codesourcery/sourcery g++ 
lite/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/bin/ld 
.exe:  cannot find 
-lD:/Microcontroladores/StellarisWare/driverlib/gcc/libdriver.a
collect2: ld returned 1 exit status
cs-make: *** [HelloWorld.elf] Error 1

Er findet scheinbar die Library nicht, ist das korrekt? Der Pfad ist 
richtig eingestellt.
Wer hat noch eine Idee?

Pablo

von Oliver (Gast)


Lesenswert?

Der Name der lib muß ohne das führende "lib" angegeben werden. Nennt 
sich die Lib "libdriver.a", gehört in die Linkerzeile -ldriver.

Oliver

von Pablo (Gast)


Lesenswert?

Hallo

wenn du genau hinschaust, ist -ldriver in der Linkerzeile:

'Building target: HelloWorld.elf'
'Invoking: ARM Sourcery Windows GCC C Linker'
arm-none-eabi-gcc
-T"D:\Microcontroladores\Beispiele\Luminary\HelloWorld\hello.ld"
-nostartfiles -L"D:\Microcontroladores\StellarisWare\driverlib\gcc"

-Wl,-Map,HelloWorld.map -ldriver -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2

-o  "HelloWorld.elf"  ./hello.o ./startup_gcc.o
-l"D:/Microcontroladores/StellarisWare/driverlib/gcc/libdriver.a"

Was könnte noch sein?

Danke

Pablo

von Oliver (Gast)


Lesenswert?

Woher kommt diese Zeile in dem Aufruf?

>-l"D:/Microcontroladores/StellarisWare/driverlib/gcc/libdriver.a"

Oliver

von Pablo (Gast)


Lesenswert?

Hallo Oliver

die Zeile habe ich eingefügt und zwar in Eclipse unter "Project 
properties" --> Settings --> ARM Sourcery Windows GCC Linker --> 
Libraries --> dort kannst du 2 Dinge angegeben:
Libraries(-l) und Library search path(-L).
Unter Libraries(-l) habe ich angegeben: 
D:\Microcontroladores\StellarisWare\driverlib\gcc\libdriver.a
Unter Library search path(-L) habe ich angegeben: 
D:\Microcontroladores\StellarisWare\driverlib\gcc

Darf diesen Aufruf nicht dorthin stehen?

Besten Dank

Pablo

von Oliver (Gast)


Lesenswert?

Pablo schrieb:
> Darf diesen Aufruf nicht dorthin stehen?

In das Fenster "Libraries(-l)" gehört nur das Wort "driver". Das wird 
dann zu -ldriver im Aufruf.

Bleibt die Frage, woher kommt das andere -ldriver?

Oliver

von Pablo (Gast)


Lesenswert?

Hallo Oliver

nochmals vielen Dank. Mit deiner Hilfe konnte bis jetzt ein Error 
weniger erzeugen. Ich habe das Wort "driver" eingefügt und -ldriver 
wegnommen und siehe da, den ersten Fehler ist 
verschwunden(`SysCtlClockSet'). Jetzt aber habe ich noch diesen Fehlern:

'Building target: HelloWorld.elf'
'Invoking: ARM Sourcery Windows GCC C Linker'
arm-none-eabi-gcc 
-T"D:\Microcontroladores\Beispiele\Luminary\HelloWorld\hello.ld" 
-nostartfiles -L"D:\Microcontroladores\StellarisWare\driverlib\gcc" 
-L"D:\Microcontroladores\StellarisWare\grlib\gcc" 
-Wl,-Map,HelloWorld.map -mcpu=cortex-m3 -mthumb -g3 -gdwarf-2 -o 
"HelloWorld.elf"  ./hello.o ./startup_gcc.o   -ldriver -lgr
./hello.o: In function `main':
D:\Microcontroladores\Beispiele\Luminary\HelloWorld\Debug/../hello.c:71: 
undefined reference to `RIT128x96x4Init'
D:\Microcontroladores\Beispiele\Luminary\HelloWorld\Debug/../hello.c:76: 
undefined reference to `RIT128x96x4StringDraw'
collect2: ld returned 1 exit status
cs-make: *** [HelloWorld.elf] Error 1

Es geht um dem Display des EVK. Ich finde nirgendwo eine Library dafür, 
aber habe ich probiert mit der Library "grlibrary" und hat es nicht 
funktioniert.
Hast du vielleicht da eine Ahnung?

Besten Dank

Pablo

von Oliver (Gast)


Lesenswert?

Pablo schrieb:
> Hast du vielleicht da eine Ahnung?

Klar. Meine Ahnung sagt mir, daß alles wesentliche dazu in den Dokus zum 
System und dem Sourcode steht.

Oliver

von Pablo (Gast)


Lesenswert?

Hallo Oliver

besten Dank für deine Antwort. Vielleicht habe ich das übersehen, oder 
vielleicht von soviel lesen, sehe ich das Wesentliche nicht mehr. Ich 
würde nicht fragen, wenn ich selber das ganze machen könnte. Manchmal 
von soviele Bäume sieht man den Wald nicht mehr. Ich probiere's 
weiter...

Grüess

Pablo

von Oliver (Gast)


Lesenswert?

google mit dem zauberwort "RIT128x96x4Init'" aufgerufen liefert nach 10 
sec suchen das hier:

http://e2e.ti.com/support/development_tools/code_composer_studio/f/81/p/57916/206015.aspx

Vielleicht hilfts.

Oliver

von Pablo (Gast)


Lesenswert?

Oliver

vielen Dank. Ich war gerade dabei die Seite von TI auseinander zu nehmen 
und habe genau die Info gefunden, die du mir geschickt hast. Es 
funktioniert alles.

Besten Dank nochmals für deine Zeit und Geduld.

Viele Grüsse aus Argentinien

Pablo

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.