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