내 .m 기능에 대한 인터페이스를 제공하는 MATLAB에서 DLL을 만들었습니다.MATLAB에서 DLL 만들기
이제 MCR 런타임 라이브러리와 함께 사용하고 싶습니다. (MCR = Matlab 컴파일러 런타임).
나는이 DLL을 결국 GCC (MinGW)로 컴파일 된 C 루틴 내에서 래퍼 DLL로 호출한다.
지금 내 기능은 두 가지 형태로 넣어됩니다 : 다음에서
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은 $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
이것이 해결책인지 확신 할 수 없지만 최근 버전의 Matlab에서는 자동으로 링크되지 않은 프로젝트에 파일을 추가 할 수 있습니다 (편집 전). –