Stworzyłem DLL w MATLAB, który zapewnia mi interfejs do moich funkcji .m.Utworzyć DLL z MATLAB
Teraz chciałbym go użyć z biblioteką wykonawczą MCR. (MCR = Matlab Compiler Runtime).
Wywołuję tę bibliotekę DLL z poziomu procedury C, która ostatecznie zostanie skompilowana przy użyciu GCC (MinGW) w opakowującej bibliotece DLL.
Teraz moja funkcja zostanie oddany do dwóch formach:
extern LIB_XYZ_C_API
bool MW_CALL_CONV mlxGet_path(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);
extern LIB_XYZ_C_API bool MW_CALL_CONV mlfGet_path(int nargout, mxArray** p);
z tych wybiorę ten drugi jako były na wydaje się być rodzajem „starym stylu/Legacy”.
nazywam to w ten sposób:
char get_path(LStrHandle path)
{
char mret = init_XYZ(); // here I call mclmcrInitialize(), mclInitializeApplication(NULL, 0) etc.
if (mret) return mret;
mret = 2;
// here the relevant part begins
mxArray * mxpath = NULL; // set it to NULL and let the callee allocate it
bool bret = mlfGet_path(1, &mxpath);
// now I convert the mxpath to a string
// What do I do with the mxpath afterwards?
// I try to free it with
mxDestroyArray(mxpath);
return mret;
}
I tu problem zaczyna: mxDestroyArray()
nie można znaleźć w trakcie łączenia:
undefined reference to `mxDestroyArray'
Gdybym ręcznie dodać -llibmx
do procesu budowania , przebiegi kompilacji, ale nie można znaleźć libmx.dll
, ponieważ MCR umieszcza tylko $MCR\runtime\win32
na ścieżce, ale nie $MCR\bin\win32
gdzie libmx.dll
żyć.
Co mogę zrobić?
Czy muszę wybrać inną funkcję "niszczenia", gdy używam samodzielnie skompilowanej biblioteki DLL?
Czy muszę się wygłupiać ze ścieżką? (Nie mam nadzieję ...)
Poza tym, istnieją inne funkcje, które są brakuje, ale myślę, że to będzie rozwiązane w ten sam sposób:
mxGetNumberOfElements
mxIsDouble
mxGetPr
mxGetM
mxGetN
mxGetData
mxIsChar
mxIsCell
mxDestroyArray
mxGetCell_730
mxSetCell_730
mxGetString_730
mxCalcSingleSubscript_730
mxGetNumberOfDimensions_730
mxCreateDoubleMatrix_730
mxCreateNumericMatrix_730
mxCreateCellMatrix_730
Nie jestem pewien, czy to jest rozwiązanie, ale ostatnie wersje Matlab pozwalają na dodawanie plików do projektu (przed kompilacją), które nie są automatycznie połączone. –