- 下载共享库,64-bit version: fftw-3.3.5-dll64.zip (3.1MB),然后解压到
D:\program\fftw-3.3.5-dll64
。目录中没有现成的静态库用于链接。 - 这一步是要生成静态库文件,用于提供连接时的符号说明,对于使用
MSVC
路线需要用到lib.exe
,对于使用windows的gcc
需要使用dlltool.exe
,执行相关命令后会生成.a
文件。
链接阶段需要
.lib
文件
.dll
文件是运行时加载的,链接器需要对应的导入库(.lib 文件) 才能解析符号。例如,libfftw3-3.dll
对应的导入库通常是libfftw3-3.lib
。- 确保 FFTW 安装目录中包含
.lib
文件,并修改 CMake 链接这些文件。
D:/program/Qt/Qt5.12.9/Tools/mingw730_64/bin/dlltool.exe -d D:/program/fftw-3.3.5-dll64/libfftw3-3.def -l D:/program/fftw-3.3.5-dll64/libfftw3-3.a
D:/program/Qt/Qt5.12.9/Tools/mingw730_64/bin/dlltool.exe -d D:/program/fftw-3.3.5-dll64/libfftw3f-3.def -l D:/program/fftw-3.3.5-dll64/libfftw3f-3.a
D:/program/Qt/Qt5.12.9/Tools/mingw730_64/bin/dlltool.exe -d D:/program/fftw-3.3.5-dll64/libfftw3l-3.def -l D:/program/fftw-3.3.5-dll64/libfftw3l-3.a
- 使用
cmake_minimum_required(VERSION 3.10)
project(MyFFTWProject)
# 设置C和C++编译器
set(CMAKE_C_COMPILER "D:/program/Qt/Qt5.12.9/Tools/mingw730_64/bin/gcc.exe")
set(CMAKE_CXX_COMPILER "D:/program/Qt/Qt5.12.9/Tools/mingw730_64/bin/g++.exe")
# 设置FFTW的路径
set(FFTW_DIR "D:/program/fftw-3.3.5-dll64")
# 包含FFTW头文件路径
include_directories(${FFTW_DIR})
# 添加可执行文件
add_executable(MyExecutable main.cpp)
# 链接FFTW库
target_link_libraries(MyExecutable
${FFTW_DIR}/libfftw3-3.a
${FFTW_DIR}/libfftw3f-3.a
${FFTW_DIR}/libfftw3l-3.a
)
# 添加DLL文件到可执行文件目录
add_custom_command(TARGET MyExecutable POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${FFTW_DIR}/libfftw3-3.dll
${FFTW_DIR}/libfftw3f-3.dll
${FFTW_DIR}/libfftw3l-3.dll
$<TARGET_FILE_DIR:MyExecutable>
)
libfftw3-3.dll
:这是双精度(double precision)版本的FFTW库,适用于大多数需要高精度计算的场景。libfftw3f-3.dll
:这是单精度(single precision)版本的FFTW库,适用于对精度要求不高但需要更快计算速度的场景。libfftw3l-3.dll
:这是长双精度(long double precision)版本的FFTW库,适用于需要更高精度的计算。