You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Armadillo调用FFTW3实现FFT遇LNK2019链接错误求助

解决Armadillo+FFTW3链接错误LNK2019: unresolved external symbol fftwf_destroy_plan

问题原因

错误中提到的fftwf_destroy_plan是FFTW3单精度版本的函数,而你当前仅链接了FFTW3的双精度库(fftw3),缺少单精度库(fftw3f)的链接,导致链接器找不到对应符号。Armadillo在启用FFTW3后,内部会根据不同数据类型调用单/双精度的FFTW函数,因此需要同时链接两种精度的库。

解决方案

1. 确认FFTW3已编译单精度库

确保你编译FFTW3时生成了单精度库(fftw3f.lib):

  • 若用CMake编译FFTW3,需添加-DFFTW_FLOAT=ON参数
  • 若用configure脚本编译,需添加--enable-float参数

2. 修改CMakeLists.txt,补充单精度库链接

将原CMake中的FFTW链接部分修改为同时链接双精度和单精度库,同时建议使用更规范的target_link_libraries替代全局的link_libraries,避免顺序问题:

# FFTW3配置
set(FFTW_INC_DIR D:/fftw-3.3.10.tar/fftw-3.3.10/fftw-3.3.10/api/)
set(FFTW_LINK_DIR D:/fftw-3.3.10.tar/fftw-3.3.10/fftw-3.3.10/build/Release/)
include_directories(${FFTW_INC_DIR})
link_directories(${FFTW_LINK_DIR})

# Armadillo配置
set(ARMA_INC_DIR D:/EndusV3/code/libExtern/armadillo-12.4.1/include)
set(ARMA_LINK_DIR D:/EndusV3/code/libExtern/armadillo-12.4.1/lib_win64)
include_directories(${ARMA_INC_DIR})
link_directories(${ARMA_LINK_DIR})

# 创建目标并链接库
add_executable(your_project_name main.cpp)
target_link_libraries(your_project_name PRIVATE fftw3 fftw3f libopenblas)

3. 验证宏定义位置

确保#define ARMA_USE_FFTW3在包含Armadillo头文件之前,你的现有代码已经符合这个要求,保持即可:

#define ARMA_USE_FFTW3
#include <armadillo>

额外注意事项

  • 确保FFTW3库的编译平台(x64)与你的项目平台一致,避免32/64位不匹配
  • Armadillo 12.4.1与FFTW3 3.3.10版本是兼容的,版本不兼容不是导致此错误的原因

内容的提问来源于stack exchange,提问作者Azar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:37:41