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

使用FFTW作为Eigen FFT后端时遭遇链接错误求助

解决Eigen FFT后端使用FFTW时的链接错误(undefined reference to fftwf_*)

核心问题定位

你的编译错误中未定义的函数都是fftwf_*前缀——这是FFTW单精度浮点数版本的API,但你当前链接的libfftw3.a是FFTW的双精度浮点数版本库,两者不匹配,导致链接失败。


解决步骤

1. 重新编译安装FFTW单精度库

你之前的configure命令只编译了双精度版本,需要添加--enable-float参数生成单精度库:

./configure --prefix <PathTofftwDirectory> --enable-float
make
make install

安装完成后,thirdparty/fftw/lib目录下会出现libfftw3f.a(单精度静态库文件)。

2. 修改CMakeLists.txt链接正确的库

在ccs目录的CMakeLists.txt中,将链接的库文件从双精度的libfftw3.a替换为单精度的libfftw3f.a:

target_link_libraries(ccs
    ${CMAKE_SOURCE_DIR}/thirdparty/fftw/lib/libfftw3f.a
    aff3ct-static-lib
)

注:link_directories指令可以保留,但直接通过target_link_libraries指定库路径更符合CMake现代用法。

3. 确保Eigen正确启用FFTW后端

在使用Eigen FFT的代码中,需要提前定义宏以启用FFTW后端,可二选一:

  • 在代码文件开头添加:
    #define EIGEN_FFTW_DEFAULT
    #include <Eigen/DSP>
    
  • 或在CMake中给ccs库添加编译定义:
    target_compile_definitions(ccs PRIVATE EIGEN_FFTW_DEFAULT)
    

4. 验证依赖传递

如果你的顶层可执行文件依赖ccs静态库,只需在顶层CMakeLists.txt中链接ccs即可,FFTW的依赖会自动传递:

add_executable(your_executable main.cpp)
target_link_libraries(your_executable ccs)

无需再单独链接FFTW库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:35:14