2015-05-26 66 views
3

我想在MATLAB MEX文件中使用FFTW庫。我從FFTW.ORG得到這個庫的Windows,當我直接在VC使用這些文件通過使用此代碼如何在MATLAB MEX文件中使用FFTW庫文件?

lib /def:libfftw3-3.def 
lib /def:libfftw3f-3.def 
lib /def:libfftw3l-3.def 

然後讓LIB文件++(Visual Studio的2013年),此代碼

#include <errno.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include "C:\Users\Maysam\Downloads\Compressed\fftw-3.3.4\api\fftw3.h" 
#pragma comment(lib, "C:\\Windows\\SysWOW64\\libfftw3-3.lib") 

void main() 
{ 
    int i, j, bw, bw2_1, size, size2_1, nrow, ncol; 
    int data_is_real; 
    int cutoff; 
    int rank, howmany_rank; 
    double *rresult, *iresult, *rdata, *idata; 
    double *workspace, *weights; 

    fftw_plan dctPlan; 
    fftw_plan fftPlan; 
    fftw_iodim dims[1], howmany_dims[1]; 

    bw = 2; 
    weights = (double *)malloc(sizeof(double) * 4 * bw); 
    rdata =(double *)malloc(sizeof(double) * 5 * bw); 
    dctPlan = fftw_plan_r2r_1d(2 * bw, weights, rdata, 
     FFTW_REDFT10, FFTW_ESTIMATE); 
} 

一切都OK並沒有錯誤編譯,但是當我嘗試在MATLAB與mex編譯和使用此代碼

#include <errno.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include "C:\Users\Maysam\Downloads\Compressed\fftw-3.3.4\api\fftw3.h" 
#include <mex.h> 

void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 
    int i, j, bw, bw2_1, size, size2_1, nrow, ncol; 
    int data_is_real; 
    int cutoff; 
    int rank, howmany_rank; 
    double *rresult, *iresult, *rdata, *idata; 
    double *workspace, *weights; 

    fftw_plan dctPlan; 
    fftw_plan fftPlan; 
    fftw_iodim dims[1], howmany_dims[1]; 

    bw = 2; 
    weights = (double *)malloc(sizeof(double) * 4 * bw); 
    rdata = (double *)malloc(sizeof(double) * 5 * bw); 
    dctPlan = fftw_plan_r2r_1d(2 * bw, weights, rdata, 
     FFTW_REDFT10, FFTW_ESTIMATE); 
} 

像下面

mex '-LC:\fftw-3.3.4-dll32' -llibfftw3-3.lib test.c 

我得到這個錯誤

Error using mex 
    Creating library test.lib and object test.exp 
test.obj : error LNK2019: unresolved external symbol fftw_plan_r2r_1d referenced in function mexFunction 
test.mexw64 : fatal error LNK1120: 1 unresolved externals 

做任何人有意見或想法來解決這個問題?

+0

不要把'-LC:\ FFT ...'加引號。但是,也是以'dll32'結尾的路徑爲基礎的,並且您正在構建一個64位MEX文件(.mexe64),您可能會遇到架構不匹配的問題。 – chappjc

+0

坦克很多,它的工作,我使用X64的lib文件,而不是X86。 – user3530607

+0

很高興工作。如果你覺得傾向,你也可以高興。 ;) – chappjc

回答

1

您需要將64位FFTW庫與64位MATLAB(您正在構建.mexw64文件)相匹配。你的build命令

mex '-LC:\fftw-3.3.4-dll32' -llibfftw3-3.lib test.c

應指向與64位FFTW庫的文件夾。例如:

mex -LC:\fftw-3.3.4-dll64 -llibfftw3-3.lib test.c

+0

我已經爲我們創建了一個MATLAB聊天室來討論與MATLAB相關的事情,或討論超出單個評論限制的討論。有空的時候請訪問我們! - http://chat.stackoverflow.com/rooms/81987/matlab – rayryeng