Symbole aus Lib werden nicht gefunden

OP #7246902
Lesenswert?
• ▲
▼
Hi,

ich benutze Keil 5 armcc und binde eine vorkompilierte Library ein

Leider kommt es dabei zu folgendem Problem:
1
linking...
2
STM32H745I_DISCO_CM7\Exe\STM32H745I_DISCO_CM7.axf: Error: L6218E: Undefined symbol util_threadBD_create (referred from I_S2C_suite.o).
3
STM32H745I_DISCO_CM7\Exe\STM32H745I_DISCO_CM7.axf: Error: L6218E: Undefined symbol volumeFader__register_cmd_callback (referred from SAP.o).
4
Not enough information to produce a FEEDBACK file.
5
Not enough information to list image symbols.
6
Not enough information to list load addresses in the image map.
7
Finished: 3 information, 0 warning and 2 error messages.
8
"STM32H745I_DISCO_CM7\Exe\STM32H745I_DISCO_CM7.axf" - 2 Error(s), 2 Warning(s).
9

10
*** Performing Cross-Module-Optimization:
11
*** Feedback file 'STM32H745I_DISCO_CM7\Exe\STM32H745I_DISCO_CM7.fed' not found.
12
Target not created.

Der Ersteller der Lib sagt mir:
So ist die eine Funktion definiert (geht nicht)
1
int util_threadBD_create(***, void *threadCode(void*), ***, ***, ***);
und so würde es testweise gehen und der Linker meckert nicht
1
int util_threadBD_create(***, void *threadCode, ***, ***, ***);


Irgendwie scheint da etwas mit diesem Funktionspointer mit Parameter 
nicht zu passen. Muss man da bei einer Library irgendwas beachten und 
etwas anders angeben bzw irgendwelche Flags aktivieren? Ich hatte solche 
Probleme bisher noch nicht mit anderen Libs. Die kann ich ohne Probleme 
einbinden

Schaue ich in mein Map File sehe ich da:
1
util_threadBD.o(.ARM.exidx) refers to util_threadBD.o(i._Z20util_threadBD_createPPvPFS_S_ES_PKci) for i._Z20util_threadBD_createPPvPFS_S_ES_PKci 
2

3
Removing util_threadBD.o(i._Z20util_threadBD_createPPvPFS_S_ES_PKci), (4 bytes)
4

5
volumeFader.o(.ARM.exidx) refers to volumeFader.o(i._Z34volumeFader__register_cmd_callbackPcPFiPKcPvES2_) for i._Z34volumeFader__register_cmd_callbackPcPFiPKcPvES2_
6

7
Removing volumeFader.o(i._Z34volumeFader__register_cmd_callbackPcPFiPKcPvES2_), (20 bytes).


Ich hab eigentlich zwei Fragen:
weiß jemand was da die Ursache sein könnte und was da schiefläuft?


Und b)
andere Funktionen sehen im Map so aus:
1
 volumeFader.o(.ARM.exidx) refers to volumeFader.o(i.volumeFader__set_enable) for i.volumeFader__set_enable
ohne dieses ganze zufällig Buchstabenzeugs (was mich an Namemangeling 
erinnert aber hier bei c-Code ja nicht der Fall ist)
Wo kann ich denn mehr über solche Details und zusammenhänge lesen was da 
genau passiert? Ich bin gerade ein wenig überfragt wei ich diese Infos 
genau bewerte die mir das Map File da gibt

Danke für Erleuchtung
Gast #7247413
Lesenswert?
• ▲
▼
Harry L. schrieb:
> Hast du die auch eingebunden?

Hast du den Eingangspost überhaupt gelesen?

A. B. schrieb:
> ohne dieses ganze zufällig Buchstabenzeugs (was mich an Namemangeling
> erinnert aber hier bei c-Code ja nicht der Fall ist)

Bist du dir denn sicher, dass du deinen C-Code auch mit einem C-Compiler 
übersetzt? Oder Compilierst du dein C-Programm (vielleicht unbewusst) 
mit einem C++-Compiler?

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.