一、Linux中编译FFTW
1、下载FFTW源码,在源码目录创建一个build目录
2、进入build目录,使用cmake编译即可
编译动态库:
cmake ..
make
编译静态库:
cmake .. -DBUILD_SHARED_LIBS=OFF
make
如果需要单精度版本,入参ENABLE_FLOAT设置为ON:
cmake .. -DENABLE_FLOAT=ON
二、WSL环境编译
在windows的WSL环境中编译,和上面的方法是一样的。
三、recompile with -fPIC报错解决
静态库在引用的时候可能会报错
报错信息
libfftw3.a(assert.c.o): relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
解决方法是修改CMakeList.txt,在312行增加下面的内容,重新编译即可解决报错。
add_library (${fftw3_lib} ${SOURCEFILES})
# 增加下面这一行
set_target_properties(${fftw3_lib} PROPERTIES POSITION_INDEPENDENT_CODE ON)
在WSL中编译的libfftw3.a大小为9.9M,服务器上编译的libfftw3.a只有2.1M。