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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren