mxCreateNumericArray error: cannot convert 'int*' to 'const size_t* {aka const long long unsigned int*}' for argument '2' to 'mxArray*

I am trying to replicate the paper of Druedahl and Jorgensen (2017), with title "A general endogenous grid method for multi-dimensional models with non-convexities and constraints". However, I have an issue with the compiler in matlab, to read C++ files. More specifically, when I do in matlab:
mex cfuncs\mexUpperEnvelopeToCommon.cpp CXXFLAGS="$CXXFLAGS -fopenmp -std=c++11 -O3 -march=native -ffast-math -fabi-version=0 -mavx2" C:\TDM-GCC-64\lib\gcc\x86_64-w64-mingw32\5.1.0\libgomp.a;
I get the error:
error: cannot convert 'int*' to 'const
size_t* {aka const long long unsigned int*}' for argument '2' to 'mxArray* mxCreateNumericArray_730(size_t, const
size_t*, mxClassID, mxComplexity)'
plhs[iout] = mxCreateNumericArray(par->ndim,dims,mxLOGICAL_CLASS,mxREAL);
Also mex -DMX_COMPAT_32 cfuncs\mexUpperEnvelopeToCommon.cpp gives the same error.
I already tried to replace all int with mwSize. However, there are also two int* in the file, and I do not know how to replace those.
Does anyone know how to solve the issue? I attach the zip file with the C++ functions.

 Respuesta aceptada

Simply replace this
int* dims = new int[par->ndim];
with this
mwSize* dims = new mwSize[par->ndim];

7 comentarios

Then I get the following error:
cfuncs\mexUpperEnvelopeToCommon.cpp:223:77: error: cannot convert 'mwSize* {aka long
long unsigned int*}' to 'int*' for argument '3' to 'void mesh::create(mesh::settings_struct*, int, int*, double**,
double*)'
mesh::create(w_interp_func, par->ndim, grid_lengths, grid_vectors, w);
So, how did changing the dims definition affect grid_lengths? Did you incorrectly change grid_lengths to mwSize* when you should have left it as int*?
I fixed that, then i get the error:
Error using mex
Cannot export mexFunction: symbol not defined
collect2.exe: error: ld returned 1 exit status
Please show the complete mex command you are using and the resulting error. I clearly see mexFunction in your mexUpperEnvelopeToCommon.cpp file, so I don't understand the error yet.
I run:
mex cfuncs\mexUpperEnvelopeToCommon.cpp XXFLAGS="$CXXFLAGS -fopenmp -std=c++11 -O3 -march=native -ffast-math -fabi-version=0 -mavx2" C:\TDM-GCC-64\lib\gcc\x86_64-w64-mingw32\5.1.0\libgomp.a;
I get:
Building with 'MinGW64 Compiler (C++)'.
Error using mex
Cannot export mexFunction: symbol not defined
collect2.exe: error: ld returned 1 exit status
I found my error! It had to do with the MexFunction. Thank you so much!
Do you finally use this kinof commamd "mex -compatibleArrayDims readTrackletsMex.cpp".
But why it does work in my situation? Could you tell me how to solve it?
errors still occurred like:
使用 'g++' 编译。
错误使用 mex
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp: In function ‘void mexFunction(int, mxArray**, int, const
mxArray**)’:
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp:76:82: warning: narrowing conversion of
‘tracklets->Tracklets::getTracklet(tracklet_idx)->Tracklets::tTracklet::poses.std::vector<Tracklets::tPose>::size()’ from
‘std::vector<Tracklets::tPose>::size_type {aka long unsigned int}’ to ‘int’ inside { } [-Wnarrowing]
const int poses_dim[] = {15, tracklets->getTracklet(tracklet_idx)->poses.size()};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/shawn/Documents/MATLAB/StereoKittiSLAM/utilsRawData/readTrackletsMex.cpp:108:3: error: ‘cout’ was not declared in this scope
cout << "Found " << tracklets->numberOfTracklets() << " tracklets." << endl;
^~~~

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Write C Functions Callable from MATLAB (MEX Files) en Centro de ayuda y File Exchange.

Preguntada:

el 16 de Mayo de 2019

Comentada:

el 18 de Mayo de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by