Sunday, September 27, 2009

FFTW issues in Matlab on Mac

For the project I'm currently working on (dVA on sphere), I'm using the Yawtb toolbox, with the S2Kit interface (see previous post) . This interface is faster when it uses FFTW3.
I followed the build instructions for S2Kit, using Macports's FFTW. S2Kit built and tested ok from command line. Testing the integration in Yawtb, I encountered a linker error:

>> yademo s2fst
% Sample(s) of code for S2FST
%
%
>> [phi,theta] = sphgrid(46,46); %%
>> mat = exp(-tan(theta/2).^2) .* ( phi == phi(1,10)); %%
>> fmat = s2fst(mat); %%
??? Invalid MEX-file '/IM2sandbox/yawtb/interfaces/s2kit/s2fst.mexmaci':
dlopen(/IM2sandbox/yawtb/interfaces/s2kit/s2fst.mexmaci, 1): Library not loaded: /opt/local/lib/libfftw3.3.dylib
Referenced from: /IM2sandbox/yawtb/interfaces/s2kit/s2fst.mexmaci
Reason: Incompatible library version: s2fst.mexmaci requires version 6.0.0 or later, but libfftw3.dylib provides version
5.0.0.

Error in ==> yademo at 77
eval(subcode(3:end));

Some googling after (see comments here), I learned that this comes from a version mismatch between Matlab's FFTW and the newer Macports version.

Contrary to Geoffrey, I decided to update the lib in Matlab (quite similarly to the suggestion here). Note: a backup is recommended. In my case, the fix implied copying libfftw3.dylib and libfftw3.dylib from /opt/local/lib to /Applications/MATLAB_R2008b.app/bin/maci/ .

And now, the yademo s2fst example works great :-)
Note that I did not check whether this fix breaks other FFTW related code. YMMV.


No comments:

Post a Comment