Compiler- und Linker-Fehler
Wenn Sie eine Bibliothek, eine MEX-Funktion oder eine ausführbare Datei über MATLAB® Coder™ generieren, ruft der Codegenerator den C/C++ Compiler auf, um ein binäres Artefakt zu erstellen. Während dieses Prozesses können Build-Fehler auftreten. Diese Fehler können während der Kompilierung, dem Linking oder während anderer Schritte des Builds auftreten. Sie können Kompilierungs- und Linking-Fehler und -Warnungen auf der Registerkarte Build Logs im Codegenerierungsbericht betrachten.
Welche Fehler- und Warnmeldungen genau angezeigt werden, hängt vom Compiler und der Toolchain ab, die Sie für Ihre Plattform verwenden. Um den aktuellen Compiler anzuzeigen oder einen anderen Compiler auszuwählen, geben Sie in der Befehlszeile den folgenden Befehl ein:
mex -setup
Build-Fehler können aus zahlreichen verschiedenen Gründen auftreten. Um Fehler zu diagnostizieren und zu beheben, müssen Sie unter Umständen die in der Compiler-Dokumentation aufgeführten Fehlermeldungen untersuchen. Im Folgenden sind einige der häufig auftretenden Probleme genannt, die bei der Codegenerierung zu Build-Fehlern führen können.
Fehlende Angabe einer Hauptfunktion
Geben Sie eine Hauptfunktion an, um eine ausführbare C/C++ Datei zu generieren. Wenn Sie keine Hauptfunktion angeben, tritt ein Build-Fehler auf. Die Hauptfunktion befindet sich in einer eigenen Hauptdatei. Wenn Sie Code generieren, erstellt MATLAB Coder eine Beispiel-Hauptdatei, verwendet diese aber nicht automatisch für die Kompilierung. Die Beispiel-Hauptfunktion ruft den generierten Code mit Pseudo-Eingabewerten auf. Für eine realistische Eingaben- und Ausgabenverarbeitung müssen Sie die Beispiel-Hauptfunktion modifizieren oder Ihre eigene Hauptfunktion erstellen.
Sie können die Hauptdatei über einen Befehlszeilenparameter für den codegen-Befehl, in der MATLAB Coder App oder mithilfe von Konfigurations-Parametern festlegen. Weitere Informationen und Beispiele finden Sie unter:
Wenn der Codegenerator die generierte Beispiel-Hauptdatei automatisch zum Erstellen einer ausführbaren Datei für Testzwecke verwenden soll, können Sie die Eigenschaft GenerateExampleMain des Konfigurationsobjekts auf 'GenerateCodeAndCompile' setzen. Siehe Incorporate Generated Code Using an Example Main Function.
Fehlende Angabe externer Codedateien
Wenn Ihr Code externe C Funktionen in coder.ceval verwendet, müssen Sie die externen Dateien mit diesen Funktionen angeben, da ansonsten Build-Fehler auftreten könnten. Sie können die Dateien als Befehlszeilenparameter für den codegen-Befehl, in der MATLAB Coder App oder mithilfe von Konfigurations-Parametern festlegen. Weitere Informationen und Beispiele finden Sie unter:
Fehler durch externen Code
Wenn Sie externen Code in den Build-Prozess aufnehmen, kann der externe Code seine eigenen Fehler einbringen. Sie können externen Code mithilfe verschiedener Methoden aufnehmen:
Externe Typendefinitionen, die Sie mithilfe von
coder.opaqueerstellen, die in externen Header-Dateien definiert werden.Struktur-Typendefinitionen, die Sie mithilfe von
coder.cstructnameerstellen, die in externen Header-Dateien definiert sind.Aufrufe von externem Code mithilfe von
coder.ceval.Spezifikation externer Build-Dateien mit dem Befehl
codegen.Aufnahme externer Code-Dateien mithilfe von
coder.cincludeodercoder.updateBuildInfo.Einbindung von externem Code mithilfe der Parameter Additional include directories oder Additional source files.
Diese Liste ist nicht vollständig. Um durch diese Methoden verursachte Fehler zu beheben, müssen Sie die Probleme mit dem externen Code untersuchen und beheben oder den externen Code von Ihrem MATLAB Programmcode trennen.
Fehler durch die Pfad-Längenbeschränkung in Windows
Beim Generieren von C/C++ Code auf der Microsoft® Windows®-Plattform können Fehler auftreten, wenn die Länge des Dateinamens und des Verzeichnispfads den von Windows erlaubten Höchstwert überschreitet. In diesen Fällen kann der Compiler die erforderlichen Dateien oder Verzeichnisse nicht finden. Um das Problem zu lösen, versuchen Sie es mit einer dieser Vorgehensweisen:
Verkürzen Sie den Dateipfad, indem Sie den Projektordner näher an das Stammverzeichnis verschieben. Auf der Windows-Plattform wird das Stammverzeichnis mit einem Backslash (
\) angegeben.Verwenden Sie den Windows-Befehl
subst, um ein virtuelles Laufwerk zu erstellen, das direkt dem Projektordner zugeordnet ist. Ist der Pfad zum Projektordner beispielsweiseC:\Users\user1\OneDrive - MyBuisness\Documents\Projects\My MATLAB Project, weisen Sie das virtuelle LaufwerkZ:direkt Ihrem Projektordner zu, indem Sie den folgenden Befehl in die Windows-Eingabeaufforderung eingeben:Wurde dieser Befehl ausgeführt, können Siesubst z: C:\Users\user1\OneDrive - MyBuisness\Documents\Projects\My MATLAB Project
Z:eingeben, um auf denMy MATLAB Project-Ordner zuzugreifen. Weitere Informationen finden Sie in der Microsoft-Dokumentation untersubst.Windows 10 unterstützt ab Version 1607 und höher lange Verzeichnispfade. Siehe die Microsoft-Dokumentation zur Verzeichnispfad-Längenbegrenzung.
Fehler durch veraltete C/C++ Compiler-Version auf Linux
Wenn Sie MATLAB auf einer Linux®-Plattform ausführen und Ihr GCC-Compiler erheblich älter als die MATLAB-Instanz ist, könnte die Codegenerierung für bestimmte MathWorks® Toolbox-Funktionen, die vorkompilierte Bibliotheken verwenden, fehlschlagen. Toolbox-Funktionen, die vorkompilierte Bibliotheken verwenden, umfassen unter anderem Funktionen zur Bildverarbeitung wie imfilter (Image Processing Toolbox), bwpack (Image Processing Toolbox) und regionprops (Image Processing Toolbox).
Um dieses Problem zu beheben, aktualisieren Sie Ihre glibc- und/oder libstdc++-Bibliotheken, indem Sie den GCC-Compiler Ihrer Linux-Plattform aktualisieren.
Laufzeit-Stacküberlauf
Wenn Ihr C-Compiler einen Laufzeit-Stacküberlauf meldet, setzen Sie den Wert des Parameters für die maximale Stacknutzung mithilfe des Parameters Stack usage max auf einen Wert, der kleiner ist als die verfügbare Stackgröße.