gpt4 book ai didi

c - 使用 minGW 将 FFTW 链接到 matlab

转载 作者:行者123 更新时间:2023-11-30 16:33:25 24 4
gpt4 key购买 nike

我的目标是使用 FFTW 库来实现 c 代码。

#include <matrix.h>
#include <mex.h>
#include "C:\Users\my_user_name\Documents\fftw-3.3.5-dll64\fftw3.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);
}

我目前使用的是 minGW,不是 Visual C++。如果(来自 Matlab)我调用

>>mex -c -LC:\Users\my_user_name\Documents\fftw-3.3.5-dll64 demo_fftw.c

编译正确,但正在运行

>> mex -LC:\Users\my_user_name\Documents\fftw-3.3.5-dll64 demo_fftw.c
Building with 'MinGW64 Compiler (C)'.
Error using mex C:\Users\MPUTHA~1\AppData\Local\Temp\mex_200676192178726_4216\demo_fftw.obj:demo_fftw.c:(.text+0x40):undefined reference to `__imp_fftw_plan_r2r_1d'collect2.exe: error: ld returned 1 exit status

我认为该错误是因为虽然 fftw_plan_r2r_1d 是在 fftw3.h 中声明的,但它是在链接器找不到它的其他地方定义的。我知道,如果我使用 Visual C++,则 .lib 文件包含定义,但自述文件仅告诉您在使用 Visual C++ 时编译 lib,而没有提及使用 mingw。

mingw 的 .lib 文件相当于什么?我还需要 .lib 吗?如果是这样,我该如何编译它们?

如果这个问题是重复的,我深表歉意,但我环顾四周,发现了很多适用于使用 Visual C++ 的建议,但没有一个与 mingw 相关。

最佳答案

您已经使编译器能够看到 FFTW 包含头文件。

现在,您需要链接到实际的 FFTW 代码。

幸运的是,FFTW 创建者对 Windows 用户很仁慈,并在此处提供了预构建的发行版:http://www.fftw.org/install/windows.html

We have created precompiled DLL files for FFTW 3.3.5 in single/double/long-double precision, along with the associated test programs. We hope that these are sufficient for most users, so that you need not worry about compiling FFTW

These DLLs were created by us, cross-compiled from GNU/Linux using MinGW; the 64-bit version is possible thanks to the mingw-w64 project. You should be able to call them from any compiler.

所以 MinGW 没问题。在你的情况下我会这样做(未经测试):

mex -LC:\Users\my_user_name\Documents\fftw-3.3.5-dll64 demo_fftw.c libfftw3-3.dll

关于c - 使用 minGW 将 FFTW 链接到 matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com