MATLAB fails to read MEX file
Show older comments
In the institution I work with MATLAB there was recently a system update (debian).
After the update this isn't possible no longer. A code snippet would look like:
data=cdi_readfield(<path to file>,[],'var100');
I have tried this with MATLAB R2010b and R2013b. Both times the same error message:
??? Attempt to execute SCRIPT cdi_readfield as a function:
<some path>/matlab-cdi/cdi_readfield.m
In the matlab-cdi folder there is a cdi_readfield.m which contains only comments and the MEX file cdi_readfield.mexglx
Apparently MATLAB only "see" cdi_readfield.m and not the MEX file. Hence it fails to read the GRIB file.
So I guess it has something to do with the update of the OS.
Did somebody make a similar experience or can give a hint what could be the reason?
Thanks
Answers (2)
Walter Roberson
on 17 Jul 2015
At the command line give the command
rehash toolboxcache
2 Comments
Alexander
on 17 Jul 2015
Walter Roberson
on 17 Jul 2015
The mexglx extension appears to be for 32 bit Linux. It is possible that you upgraded to 64 bit Linux, which would use mexa64 as the extension.
You should go back to the cdi directory and use the "compile" function to create a .mexa64 for use on your system.
Steven Lord
on 17 Jul 2015
0 votes
The extension .mexglx is the correct extension for 32-bit Linux MEX-files. As part of the OS upgrade, did you upgrade to 64-bit Linux? If so, you will need to rebuild the MEX-file (or if you don't have the source code, ask the person from whom you obtained the MEX-file to provide you with a new file.) The new MEX-file should have the extension .mexa64 as described in the documentation for MEXEXT.
9 Comments
Alexander
on 17 Jul 2015
Walter Roberson
on 17 Jul 2015
No, the .mex* files are outputs of the mex process. The inputs are the .c and .h files. Use the compile.m provided to generate a .mex* for your system.
Walter Roberson
on 17 Jul 2015
Steve, the information about .mexlgx is oddly difficult to find. Searching there are hits from users listing it variously as 32 bit Linux or 64 bit Linux. I happened to remember the mexext command and checked the documentation for it, which does not mention 32 bit Linux or mexglx, so I had to deduce that mexglx was the 32 bit version based upon a specific other name being given for 64 bit Linux.
As 32 bit Linux is no longer a platform for MATLAB this is historical information, but it would still have been better if it had been documented in current documents, even if only in the notes for mexext
Walter Roberson
on 17 Jul 2015
install gcc-4.3 and then change the line to
CC='gcc-4.3'
However, that part is a warning and the error is the lack of -lcdi so the cdi library needs to be built.
Walter Roberson
on 17 Jul 2015
Look in the INSTALL file. It says
Pre-requisites -------------- Check if you have the netCDF and CDI libraries on your system (usually these are called libnetcdf.a and libcdi.a). If not, you need to install these libraries before continuing.
netCDF: available from http://www.unidata.ucar.edu/software/netcdf (matlab-cdi has been tested only with netcdf 3.x, netcdf 4.0 may or may not work)
Walter Roberson
on 18 Jul 2015
Yes you will need to rebuild netCDF and CDI for 64 bit.
Alexander
on 20 Jul 2015
Categories
Find more on MATLAB Support for MinGW-w64 C/C++ Compiler in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!