Windows下FFTW3多线程使用报错code=3221225785求解
Windows下FFTW3多线程调用错误的解决办法
先给结论:Windows版FFTW3完全支持多线程
你碰到的错误码3221225785对应系统错误0xC000001D——非法指令,说白了就是你链接的是单线程版FFTW库,却硬要调用多线程API,不崩才怪。
具体解决步骤
- 换用多线程版本的库文件:
FFTW3在Windows下分单线程和多线程包,多线程版的静态库叫libfftw3_threads-3.lib,动态库是libfftw3_threads-3.dll。把你之前用的单线程库libfftw3-3.lib换成这个,而且要同时保留基础库的链接(多线程库依赖基础库)。 - 调整项目的编译链接配置:
拿VS的CUDA项目举例:- 链接器的「附加依赖项」里要加
libfftw3_threads-3.lib和libfftw3-3.lib; - 项目属性的C/C++「代码生成」里,选「多线程(/MT)」或「多线程DLL(/MD)」,别选单线程选项,否则和FFTW的多线程库不兼容。
- 链接器的「附加依赖项」里要加
- 按正确顺序调用多线程API:
别乱调顺序,按这个流程来:// 先初始化多线程环境 fftw_init_threads(); // 设置要用的线程数 fftw_plan_with_nthreads(4); // 比如开4个线程 // 然后正常创建计划、执行FFT fftw_plan plan = fftw_plan_dft_1d(...); fftw_execute(plan); // 最后记得清理资源 fftw_destroy_plan(plan); fftw_cleanup_threads(); // 多线程环境也要清掉 - 检查库和项目的架构匹配:
比如你项目是x64编译目标,就必须用64位的FFTW多线程库,32位库配64位项目肯定会出非法指令错误。
要是自己编译FFTW源码的话
编译时必须开多线程开关:
- 用CMake的话,加参数
-DENABLE_THREADS=ON; - 直接用Makefile编译的话,加
--enable-threads选项。
内容的提问来源于stack exchange,提问作者OOOver
相关产品推荐
相关产品推荐

