MATLAB fails to read MEX file

7 次查看(过去 30 天)
Alexander
Alexander 2015-7-17
评论: Alexander 2015-7-20
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

回答(2 个)

Walter Roberson
Walter Roberson 2015-7-17
At the command line give the command
rehash toolboxcache
  2 个评论
Alexander
Alexander 2015-7-17
Thanks Walter, but unfortunately this doesn't change anything.
Walter Roberson
Walter Roberson 2015-7-17
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
Steven Lord 2015-7-17
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 个评论
Walter Roberson
Walter Roberson 2015-7-18
Yes you will need to rebuild netCDF and CDI for 64 bit.
Alexander
Alexander 2015-7-20
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Reference Applications 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by