Unbekannte Symbole auflösen

humanica

Lt. Junior Grade
Registriert
Juni 2015
Beiträge
321
Hallo,

ich arbeite daran vorhandenen Matlabsimulationen auf einen DSP-Cluster zu bekommen. Dazu wird der Quellcode durch den Matlab Coder wahlweise in C oder C++ Code übersetzt und mittels VisualDSP++ auf den DSP gebracht.

Nun zu meinem eigentlichen Problem. Die generierten .c und .h Dateien enthalten Symbole, welche der DSP nicht kennt.
Beispielsweise wird in einer .h Datei abgefragt, welche Windowsversion der Computer nutzt. Das führt beim compilieren zu Fehlermeldungen.

Meine eigenen Ideen:

Es muss eine weitere Datei angelegt werden um diese Symbole aufzulösen.

1. Eine weitere .h Datei schreiben und in jeder generierten Datei inkludieren. Das manuelle Inkludieren ist eine unschöne Lösung.

2. Eine .c Datei schreiben, mittels VisualDSP++ Compiler zuerst in eine Objekt Datei und anschließend in eine statische Bibliothek verwandeln.
Statt auf "compile" zu drücken müssten die .c und .h Dateien manuell in Objekt Dateien und anschließend in ein ausführbares Programm verwandelt werden.
Es gibt ein weiteres Problem.
Möchte das Quellprogramm eine Variable oder Funktion einer Bibliothek aufrufen, muss dies mit "EXTERN" gekennzeichnet sein. Habe ich hier evtl das Handbuch falsch verstanden? Gilt das ggf nur für Assemblercode?

Bitte entschuldigt falls die Frage und meine Lösungevorschläge trivial erscheinen, es handelt sich um mein erstes größeres Projekt in der Informatik.
Ich bin für Ratschläge, links und Tipps jeglicher Art dankbar :)

Viele Grüße,

Lukas
 
Du kannst keine Datei anlegen, mit der du die Symbole auflöst. Das machst du nämlich nicht, sondern der Linker. Und wenn er die Symbole nicht findet, kann er dein Binary nicht linken.
Du musst dem Build System beibringen, in welchen Bibliotheken die fehlenden Symbole zu finden sind, oder falls du keine hast, Verweise auf sie aus deinem Programm entfernen.

€: Falls das nicht klar sein sollte: Symbole sind die Namen von Variablen oder Funktionen. Wenn dein Programm Verweise auf Variablen oder Funktionen enthält, die nicht Teil deines eigenen Programms sind, muss der Linker sie irgendwo her nehmen und das kann er wohl von sich aus nicht. Deshalb musst du ihm sagen, wo er gucken muss, oder eben auf die Verwendung dieser Dinge verzichten.
 
Zuletzt bearbeitet:
Hi,

ich muss auch mal meinen Senf dazu geben ;)

Ich denke, dass du einfach ein Architektur-Problem hast. VisualDSP++ scheint von Analog Devices für deren SHARC DSPs zu sein (hab nur kurz gegooglet).

Wenn der Matlab Coder aber Code für Windows (x86) erstellt, werden da Symbole etc. vorausgesetzt, die der DSP nicht hat, da kein Windows.
Das würde auch erklären, warum du Bibliotheken "extern" kennzeichnen muss, damit sie mit hinein kompiliert werden.

Dein Problem sollte sich lösen lassen, wenn du mi Matlab generischen C-Code erstellst, der auf keine Windows-Funktionen zugreift.

Prinzipiell sind das aber nur Vermutungen, da ich noch ein paar weitere Informationen bräuchte, um das Problem wirklich einzugrenzen oder zu finden. Das wären u.a. Matlab Coder Target-Arch, VisualDSP Targel-Arch, etc.

Grüße,
süchtla
 
Zurück
Oben