Tôi đã tạo một DLL trong MATLAB cung cấp cho tôi một giao diện cho các hàm .m của tôi.Tạo một DLL từ MATLAB
Bây giờ tôi muốn sử dụng nó với Thư viện thời gian chạy MCR. (MCR = Thời gian chạy trình biên dịch Matlab).
Tôi gọi hàm DLL này từ bên trong một thường trình C mà cuối cùng được biên dịch với GCC (MinGW) thành một trình bao bọc DLL.
Bây giờ chức năng của tôi được đưa vào hai hình thức:
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);
Từ những tôi chọn sau này một khi cựu trên có vẻ là loại "kiểu cũ/di sản".
tôi gọi nó theo cách này:
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;
}
Và đây những rắc rối bắt đầu: mxDestroyArray()
không thể được tìm thấy trong quá trình liên kết:
undefined reference to `mxDestroyArray'
Nếu tôi tự thêm -llibmx
đến quá trình xây dựng , bản xây dựng chạy, nhưng sau đó không thể tìm thấy libmx.dll
vì MCR chỉ đặt $MCR\runtime\win32
vào đường dẫn chứ không phải $MCR\bin\win32
trong đó libmx.dll
sống.
Tôi có thể làm gì?
Tôi có phải chọn một chức năng "hủy" khác khi tôi sử dụng DLL tự biên dịch không?
Hoặc tôi có phải đánh lừa xung quanh với đường dẫn không? (Tôi không hy vọng như vậy ...)
Bên cạnh đó, có những chức năng khác mà bị thiếu, nhưng tôi nghĩ rằng điều này sẽ được giải quyết trong cùng một cách:
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
Không chắc đây có phải là giải pháp hay không, nhưng các phiên bản gần đây của Matlab cho phép bạn thêm tệp vào dự án (trước khi biên dịch) không được liên kết tự động. –