使用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
相关产品推荐
相关产品推荐

