|
|
Erzeugung mat File über API von Matlab in Eclipse in C |
|
Real_Enigneer |

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 15.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.06.2016, 16:46
Titel: Erzeugung mat File über API von Matlab in Eclipse in C
|
 |
|
 |
|
Hi,
versuche gerade in Eclipse in C ein mat-File zu erzeugen, bzw. zu lesen.
Dafür habe ich in Eclipse (Mars 2) unter Properties -> C/C++ Build->Settings->MinGW C Linker folgende Daten eingegeben:
Libraries: libmat,libeng,libmex,libmx
Library search path: Pfad der zu Matlab .libs führt.
Die h-Files wurden direkt in den Workspace kopiert.
Mein Problem ist jetzt, dass das Programm zwar kompiliert wird, die exe aber sofort terminiert wird.
Mein Testprogramm sieht wie Folgt aus:
/*
============================================================================
Name : test823.c
Author : xxx
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include "mat.h"
#include <string.h>
void cpystr(char* str1, char* str2);
int main() {
char *data_name={"Test.mat"};
char *dir_data={Pfad zu Datei};//for input
char *data_path={0};//for usage!
char *errormessage={0};
cpystr(data_path,dir_data); //copy path for usage
puts("Start");
strcat(data_path,data_name);
MATFile *pMat=NULL;
printf("Data:%s\n",data_path);
//pMat=matGetFp(data_path);
pMat=matOpen(data_path,"r");
if(pMat==NULL)
{
strcpy(errormessage,"Error!");
}
else
{
strcpy(errormessage,"Alel ok!");
}
printf("Result:%s ",errormessage);
return EXIT_SUCCESS;
}
void cpystr(char* str1, char* str2)
{
int counter=0;
//maybe check here how long the name is!
for(counter=0;counter<=strlen(str2);counter++)
{
str1[counter]=str2[counter];
}
}
Hat jemand von euch eine Idee? Hab ich irgendetwas vergessen?
Ich habe auch schon die .lib+.dll in .a Files umwandeln lasse, mit dem gleiche Ergebnis.
Über eine Idee würde ich mich sehr freuen.
VG
Real_Engieneer
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.06.2016, 13:03
Titel: Re: Erzeugung mat File über API von Matlab in Eclipse in C
|
 |
Hallo Real_Enigneer,
Jetzt ist data_path ein NULL-Pointer. Es wurde kein Speicherplatz für reserviert, auf den diese Variable zeigt.
Jetzt werden Daten in den NULL-Pointer kopiert.
C ist nicht trivial, denn man kann sehr leicht irgendwohin irgendwelche Werte schreiben und das Programm und sogar den Rechner effizient damit abschießen. Der Umgang mit Strings ist eine Kunst für sich und selbstgestricke Funktionen zum Kopieren von Strings sind ein absolutes DONT! Nicht machen!!! Daran sind schon so viele Programmierer gescheitert und haben furchtbare Sicherheitslücken in Programmen hinterlassen, dass man sich da nicht anschließen sollte. Verwende für alle String-Funktionen unbedingt Methoden aus den Bibliotheken.
Die hier ist übrigens ein reines C-Problem und hat mit Matlab nur sekundär zu tun.
Gruß, Jan
|
|
|
Real_Enigneer |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 15.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.06.2016, 09:07
Titel:
|
 |
Hallo Jan,
joa die Speicherreservierung wäre besser gewesen. Ändert aber nichts daran, dass der Code fehlerfrei funktioniert
Und einen String über Pointern zu kopieren ist nicht immer verkehrt
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde.
LG
Real_Engineer
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.06.2016, 17:56
Titel:
|
 |
Hallo Real_Enigneer,
"die exe aber sofort terminiert wird" klingt nicht nach "fehlerfrei funktioniert".
Zitat: |
Und einen String über Pointern zu kopieren ist nicht immer verkehrt ;) |
Einen String in einen NULL-Pointer zu kopieren ist ganz bestimmt falsch.
Zitat: |
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde. |
Das ist nicht naheliegend. Die Libraries sind hunderttausenfach getestet und die Compiler noch viel öfter.
Gruß, Jan
|
|
|
Real_Enigneer |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 15.06.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.06.2016, 07:26
Titel:
|
 |
|
 |
|
Jan S hat Folgendes geschrieben: |
Hallo Real_Enigneer,
"die exe aber sofort terminiert wird" klingt nicht nach "fehlerfrei funktioniert".
Zitat: |
Und einen String über Pointern zu kopieren ist nicht immer verkehrt  |
Einen String in einen NULL-Pointer zu kopieren ist ganz bestimmt falsch.
Zitat: |
Das Problem ist wohl der Compiler, der von Matlab für die Libs verwendet wurde. |
Das ist nicht naheliegend. Die Libraries sind hunderttausenfach getestet und die Compiler noch viel öfter.
Gruß, Jan |
Hallo Jan,
das Problem wurde gelöst und die exe funktioniert fehlerfrei.
Der Fehler lag nicht an dem Pointer, sondern daran, das Matlab bei der Installation eine Umgebungsvariable nicht vollständig gesetzt hatte, aus Gründen auch immer. Die exe wurde also deshalb terminiert, weil die dlls nicht gefunden wurden.
Zudem empfiehlt MathWorks selber strickt den MinGW Compiler 4.9.2 für Matlab 2015b zu verwenden. Bei Bedarf kannst Du sie gerne anschreiben.
Das Programm funktioniert ohne Probleme.
Alles weitere geht hier OT und hat nichts mit Matlab zu tun.
Grüße
Real_Engineer
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|