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

3
我正在尝试在MATLAB MEX文件中使用FFTW库。我从FFTW.ORG获取了该库的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),很可能存在架构不匹配的问题。 - chappjc
非常感谢,它起作用了,我使用的是X64库文件而不是X86。 - user3530607
很高兴它起作用了。如果你感觉倾向的话,也可以点赞。 ;) - chappjc
1个回答

1

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

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


我创建了一个MATLAB聊天室,供我们讨论与MATLAB相关的事情,或者进行超出单个评论限制的讨论。有时间时欢迎来参加!- http://chat.stackoverflow.com/rooms/81987/matlab - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接