Hallo,
ich komme aus der Java Ecke und habe weder von C++ noch von Mathlab Ahnung. Jetzt muss ich für ein wissenschaftliches Paper den Graph-Matching Algorithmus unter http://www.seas.upenn.edu/~timothee/software/graph_matching/graph_matching.html zum laufen bringen.
Mein Ziel ist es, einfach erstmal das Tutorial von denen lauffähig zu bekommen. Jetzt frage ich mich, was ich falsch mache.
Ich verwende Mathlab 7.8.0 (R2009a) und als C++ Compiler die neueste Version von "Microsoft Visual C++ 2008 Express".
Beim Aufruf von "compileDir" erhalte ich nun mehrere der folgenden Fehler:
Error: compilation of \mex_istril.cpp failed : Bibliothek "C:\USERS\JANNOE~1\APPDATA\LOCAL\TEMP\MEX_BY~1\templib.x" und Objekt "C:\USERS\JANNOE~1\APPDATA\LOCAL\TEMP\MEX_BY~1\templib.exp" werden erstellt.
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matClose_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matPutVariable_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matOpen_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.mexw32 : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
C:\PROGRA~1\MATLAB\R2009A~1\BIN\MEX.PL: Error: Link of 'mex_istril.mexw32' failed.
Nach Recherchen bin ich darauf gekommen, dass es wohl immer um die Funktion "save2matfile" geht. Diese Funktion steht in der Klasse "MatlabInterface" und sieht wie folgt aus:
static void save2matfile(mxArray *A,string file,string varname){
//mxArray*mxA=array2mxArray(scores);
//setDimensions(mxA,m,n);
//save2matfile(mxA,"C:\\tim\\temp\\trash\\1.mat","A");
MATFile *pmat = matOpen(file.c_str(), "w");
if (pmat == NULL)
assert(0);//mexErrMsgTxt("error accessing mat file\n");
int status = matPutVariable(pmat, varname.c_str(), A);
if (status != 0)
assert(0);//mexErrMsgTxt("error writing mat file\n");
if (matClose(pmat) != 0)
mexPrintf("Error closing file %s\n",file.c_str());
else
mexPrintf("saved file %s\n",file.c_str());
}
Da der Paper bereits im Dezember eingereicht werden muss, stehe ich etwas unter Zeitdruck.
Daher wollte ich fragen, ob irgendjemand eine Idee hat?
Oder welche Informationen braucht ihr noch, um mir helfen zu können?
Woran könnte es liegen? Ich meine der Code müsste ja genau so laufen
Vielen herzlichen Dank für jede Hilfe!
Jan Nößner
ich komme aus der Java Ecke und habe weder von C++ noch von Mathlab Ahnung. Jetzt muss ich für ein wissenschaftliches Paper den Graph-Matching Algorithmus unter http://www.seas.upenn.edu/~timothee/software/graph_matching/graph_matching.html zum laufen bringen.
Mein Ziel ist es, einfach erstmal das Tutorial von denen lauffähig zu bekommen. Jetzt frage ich mich, was ich falsch mache.
Ich verwende Mathlab 7.8.0 (R2009a) und als C++ Compiler die neueste Version von "Microsoft Visual C++ 2008 Express".
Beim Aufruf von "compileDir" erhalte ich nun mehrere der folgenden Fehler:
Error: compilation of \mex_istril.cpp failed : Bibliothek "C:\USERS\JANNOE~1\APPDATA\LOCAL\TEMP\MEX_BY~1\templib.x" und Objekt "C:\USERS\JANNOE~1\APPDATA\LOCAL\TEMP\MEX_BY~1\templib.exp" werden erstellt.
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matClose_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matPutVariable_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_matOpen_d" in Funktion ""public: static void __cdecl MatlabInterface::save2matfile(struct mxArray_tag *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?save2matfile@MatlabInterface@@SAXPAUmxArray_tag@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1@Z)".
mex_istril.mexw32 : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
C:\PROGRA~1\MATLAB\R2009A~1\BIN\MEX.PL: Error: Link of 'mex_istril.mexw32' failed.
Nach Recherchen bin ich darauf gekommen, dass es wohl immer um die Funktion "save2matfile" geht. Diese Funktion steht in der Klasse "MatlabInterface" und sieht wie folgt aus:
static void save2matfile(mxArray *A,string file,string varname){
//mxArray*mxA=array2mxArray(scores);
//setDimensions(mxA,m,n);
//save2matfile(mxA,"C:\\tim\\temp\\trash\\1.mat","A");
MATFile *pmat = matOpen(file.c_str(), "w");
if (pmat == NULL)
assert(0);//mexErrMsgTxt("error accessing mat file\n");
int status = matPutVariable(pmat, varname.c_str(), A);
if (status != 0)
assert(0);//mexErrMsgTxt("error writing mat file\n");
if (matClose(pmat) != 0)
mexPrintf("Error closing file %s\n",file.c_str());
else
mexPrintf("saved file %s\n",file.c_str());
}
Da der Paper bereits im Dezember eingereicht werden muss, stehe ich etwas unter Zeitdruck.
Daher wollte ich fragen, ob irgendjemand eine Idee hat?
Oder welche Informationen braucht ihr noch, um mir helfen zu können?
Woran könnte es liegen? Ich meine der Code müsste ja genau so laufen
Vielen herzlichen Dank für jede Hilfe!
Jan Nößner