ARM Linker findet Symbol in Library nicht

Gast #7071784
Lesenswert?
• ▲
▼
Hallo miteinander

Ich entwickle gerade auf einem TMS320F28388D von Texas Instruments. Auf 
dem Chip befindet sich ein Arm Cortex Prozessor auf dem ich ein Teil 
meines Projekts implementiere.

Seit gestern habe ich Probleme, meinen Code für den Cortex zu 
compilieren. Ein Widerherstellen des Codes zu einem früheren commit hat 
bisher nichts gebracht, es scheint ein Problem mit dem Linker zu geben.

Zusammenfassend sieht die Situation so aus:

1. Beim Compilieren kriege ich folgende Fehlermeldungen (s. auch 
issue_1.png):
1
Description  Resource  Path  Location  Type
2
no source files, nothing to do  ccard_tcp_interface       C/C++ Problem
3
Symbol 'Ethernet_receiveISR' could not be resolved  main_tcp_interface_lwip.c  /ccard_tcp_interface  line 615  Semantic Error
4
Symbol 'Ethernet_transmitISR' could not be resolved  main_tcp_interface_lwip.c  /ccard_tcp_interface  line 614  Semantic Error

Die Symbole "Ethernet_receiveISR" und "Ethernet_transmitISR" sollten 
aber in der library "driverlib_cm.lib" definiert sein, das kann ich mit 
dem folgenden Kommando verifizieren:
1
nm ~/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib | grep Ethernet_rec
2

3
00000001 T Ethernet_receiveISR
4
00000001 T Ethernet_receivePacketCallback
5

6
nm ~/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib | grep Ethernet_tran
7

8
00000001 T Ethernet_transmitISR

In Eclipse habe ich die library und deren Pfad explizit für den Linker 
angegeben, siehe auch "issue_2.png".

In der Build Konsole scheint der Fehler an folgender Stelle auzutreten:
1
Building target: "enet_lwip_cm.out"
2
Invoking: ARM Linker
3
"/home/dvarx/ti/ccs1030/ccs/tools/compiler/ti-cgt-arm_20.2.4.LTS/bin/armcl" -mv7M4 --code_state=16 --float_support=none -me -O0 --opt_for_speed=0 --define=_FLASH --define=ccs -g --diag_warning=225 --gen_func_subsections=on --abi=eabi --ual -n -z -m"enet_lwip_cm.map" --heap_size=0 --stack_size=2048 -i"/home/dvarx/ti/ccs1030/ccs/tools/compiler/ti-cgt-arm_20.2.4.LTS/lib" -i"/home/dvarx/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug" -i"/home/dvarx/ti/ccs1030/ccs/tools/compiler/ti-cgt-arm_20.2.4.LTS/include" -i"/home/dvarx/ti/ccs1030/ccs/tools/compiler" -i"/home/dvarx/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug" --reread_libs --warn_sections --xml_link_info="enet_lwip_cm_linkInfo.xml" --rom_model -o "enet_lwip_cm.out" "./comm_interface.obj" "./f2838xif.obj" "./fs.obj" "./httpd.obj" "./lwiplib.obj" "./main_tcp_interface_lwip.obj" "./pinout.obj" "./startup_ccs.obj" "./ustdlib.obj" "../2838x_flash_lnk_cm_lwip.cmd"  -l"/home/dvarx/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib" -l"/home/dvarx/ti/C2000Ware_3_04_00_00_Software/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib" -llibc.a 
4
>> ERROR: no source files, nothing to do
5
Finished building target: "enet_lwip_cm.out"

Die Fehlermeldung des Linkers verstehe ich nicht. Der Linker muss ja an 
sich keine source files kompilieren sondern eben nur linken, weshalb 
beschwert er sich dann über fehlende source files?
Angehängte Dateien:
Gast #7071863
Lesenswert?
• ▲
▼
Liegt denn die Library mit ihrem Namen *.lib in einem vom gcc-Linker 
verständlichen Format vor? Die Erweiterung ist ungewöhnlich, der 
gcc-Linker nutzt üblicherweise *.a

Und ist es nicht so, daß der Linker beim Argument -l automatisch "lib" 
vor den angegebenen Namen und ".a" dahinter setzt?

Ich meine schon gesehen zu haben, daß um "libm.a" zu verwenden nur "-lm" 
angegeben werden muss.
Gast #7072628
Lesenswert?
• ▲
▼
Hallo miteinander

Wie sich herausstellte war das Problem ein `-n` Flag dass im Compiler 
gesetzt wurde. Dies hatte zur Folge dass der Compiler nur Assembly Code 
`.asm` und kein Objektcode `.obj` erzeugt hat.

Damit konnte der Linker auch nichts linken. Nachdem ich das Flag 
deaktiviert habe funktioniert alles wieder.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.