से एक डीएलएल बनाएं मैंने MATLAB में एक DLL बनाया है जो मुझे मेरे .m कार्यों में एक इंटरफ़ेस प्रदान करता है।MATLAB
अब मैं इसे एमसीआर रनटाइम लाइब्रेरी के साथ उपयोग करना चाहता हूं। (एमसीआर = मैटलैब कंपाइलर रनटाइम)।
मैं इस डीएलएल को सी सी रूटीन के भीतर से कॉल कर रहा हूं जो अंततः जीसीसी (मिनजीडब्लू) के साथ एक रैपर डीएलएल में संकलित हो जाता है।
अब मेरी समारोह दो रूपों में डाल दिया जाता है:
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);
इन से पर एक तरह से "पुरानी शैली/विरासत" प्रतीत हो रहा है कि मैं बाद के एक पूर्व के रूप में चुनें।
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;
}
और यहाँ मुसीबत शुरू होता है: mxDestroyArray()
लिंक करने की प्रक्रिया में नहीं पाया जा सकता है:
undefined reference to `mxDestroyArray'
मैं मैन्युअल रूप से निर्माण प्रक्रिया को -llibmx
जोड़ देते हैं तो
मैं इसे इस तरह से फोन , बिल्ड चलता है, लेकिन फिर libmx.dll
नहीं मिल सकता है, क्योंकि एमसीआर केवल $MCR\runtime\win32
पथ में रखता है, लेकिन $MCR\bin\win32
नहीं जहां libmx.dll
जीवन।
मैं क्या कर सकता है?
क्या मुझे स्वयं संकलित DLL का उपयोग करते समय एक अलग "नष्ट" फ़ंक्शन चुनना है?
या क्या मुझे पथ के साथ मूर्ख बनाना है? इसके अलावा (मैं बहुत आशा नहीं है ...)
, अन्य कार्यों जो याद कर रहे हैं देखते हैं, लेकिन मुझे लगता है कि यह एक ही तरीके से हल किया जा जाएगा:
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
यह सुनिश्चित नहीं है कि यह समाधान है या नहीं, लेकिन मैटलैब के हाल के संस्करण आपको प्रोजेक्ट (संकलन से पहले) में फ़ाइलों को जोड़ने की अनुमति देते हैं जो स्वचालित रूप से लिंक नहीं होते हैं। –