MATLAB fails to read MEX file

7 vues (au cours des 30 derniers jours)
Alexander
Alexander le 17 Juil 2015
Commenté : Alexander le 20 Juil 2015
In the institution I work with MATLAB there was recently a system update (debian).
Before this I could read GRIB files with the NetCDF/GRIB reader function cdi_readfile.
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

Réponses (2)

Walter Roberson
Walter Roberson le 17 Juil 2015
At the command line give the command
rehash toolboxcache
  2 commentaires
Alexander
Alexander le 17 Juil 2015
Thanks Walter, but unfortunately this doesn't change anything.
Walter Roberson
Walter Roberson le 17 Juil 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.

Connectez-vous pour commenter.


Steven Lord
Steven Lord le 17 Juil 2015
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 commentaires
Walter Roberson
Walter Roberson le 18 Juil 2015
Yes you will need to rebuild netCDF and CDI for 64 bit.
Alexander
Alexander le 20 Juil 2015
Update: After I took 64-bit builds of netCDF and CDI libraries I tried to compile again with MATLAB R2013b (hence no gcc compiler warning).
Now I get the following errors:
COMPILING cdi_varlist...
cdi_mx.c: In function ‘getLevel’:
cdi_mx.c:431:43: warning: incompatible implicit declaration of built-in function ‘modf’ [enabled by default]
cdi_mx.o: In function `getLevel':
cdi_mx.c:(.text+0x78c): undefined reference to `Warning'
lib64/libcdi.a(cdf.o): In function `hdfLibraryVersion':
(.text+0x24): undefined reference to `H5get_libversion'
lib64/libcdi.a(gribapi.o): In function `gribapiLibraryVersion':
(.text+0x5): undefined reference to `grib_get_api_version'
lib64/libcdi.a(stream_gribapi.o): In function `gribapiGetValidityDateTime':
(.text+0x27): undefined reference to `grib_get_long'
.....
.....
lib64/libnetcdf.a(libnetcdf4_la-nc4attr.o): In .function `NC4_del_att':
(.text+0x157f): undefined reference to `H5Adelete'
collect2: error: ld returned 1 exit status
mex: link of ' "cdi_varlist.mexa64"' failed.
I'm not completely sure, if there is still a problem with the libraries. Or if the NetCDF/GRIB reader is just outdated, and not usable for 64-bit systems.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by