如何在 MATLAB MEX 文件中使用 FFTW lib 文件?

Posted

技术标签:

【中文标题】如何在 MATLAB MEX 文件中使用 FFTW lib 文件?【英文标题】:How do use FFTW lib file in MATLAB MEX-file? 【发布时间】:2015-05-26 13:41:20 【问题描述】:

我正在尝试在 MATLAB MEX 文件中使用 FFTW 库。我从FFTW.ORG for Windows 获得这个库,并使用此代码制作 lib 文件

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

然后,当我通过这段代码直接在 VC++ (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);

一切正常,编译没有错误,但是当我尝试编译和使用这段代码时

#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);

在 MATLAB 中使用mex,如下所示

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

有人有解决这个问题的建议或想法吗?

【问题讨论】:

不要将-LC:\fft... 放在引号中。但也基于以 dll32 结尾的路径,并且您正在构建一个 64 位 MEX 文件 (.mexe64),您可能存在架构不匹配。 坦克很多,它工作,我使用 X64 lib 文件而不是 X86。 很高兴它成功了。如果您愿意,您也可以投票。 ;) 【参考方案1】:

您需要将 64 位 FFTW 库与 64 位 MATLAB 匹配(您正在构建一个 .mexw64 文件)。你的构建命令

mex '-LC:\fftw-3.3.4-<strong>dll32</strong>' -llibfftw3-3.lib test.c

应指向包含 64 位 FFTW 库的文件夹。例如:

mex -LC:\fftw-3.3.4-<strong>dll64</strong> -llibfftw3-3.lib test.c

【讨论】:

我创建了一个 MATLAB 聊天室,供我们讨论与 MATLAB 相关的事情,或者进行超出单个评论限制的讨论。有时间就来找我们吧! - chat.***.com/rooms/81987/matlab

以上是关于如何在 MATLAB MEX 文件中使用 FFTW lib 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到 Matlab mex 文件的代码?

如何诊断为啥在 MATLAB 中执行 .mex 文件时无法加载 .so 文件?

如何使用 Visual Studio 2010 调试 MATLAB .mex32/.mex64 文件

如何在 C++ 中使用 mex.h

在 Windows 上使用 GFortran 在 Matlab 中创建 Mex 文件

如何通过 Eclipse 编码和编译 Matlab mex 文件?