Qt中通过.pro文件链接FFTW3库时出现未定义引用问题求助
Qt链接FFTW3时出现
undefined reference to 'fftwf_malloc'的解决方法 核心问题
你代码里调用的是fftwf_*开头的单精度FFTW函数,但当前.pro文件只链接了双精度版本的fftw3库,且库路径配置存在错误,导致链接器找不到对应函数的实现。
解决步骤
修正库链接配置
单精度FFTW库的名称是fftw3f,需要在.pro的LIBS中添加该库,同时修正库路径的绝对路径(原配置少了根目录的/):LIBS += -L/usr/local/lib -lfftw3 -lfftw3f注:如果只用到单精度函数,也可以只写
-lfftw3f,保留-lfftw3不影响。添加头文件搜索路径
之前出现找不到<fftw3.h>的问题,是因为编译器没找到头文件目录,在.pro中加入:INCLUDEPATH += /usr/local/include验证库文件存在性
确认/usr/local/lib目录下存在libfftw3f.so(动态库)或libfftw3f.a(静态库),如果是静态库链接,确保编译时能正确找到静态库文件。
修改后的完整.pro文件
QT -= gui CONFIG += c++17 console CONFIG -= app_bundle # 配置FFTW头文件路径 INCLUDEPATH += /usr/local/include # 链接FFTW双精度+单精度库 LIBS += -L/usr/local/lib -lfftw3 -lfftw3f # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ fftlib/cpu.c \ fftlib/fft.c \ fftlib/kernel.c \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target HEADERS += \ fftlib/fft.h \ fftlib/fft_internal.h
额外说明
FFTW3的库分三个版本:
libfftw3.so:双精度(double),对应fftw_*函数libfftw3f.so:单精度(float),对应fftwf_*函数libfftw3l.so:长双精度(long double),对应fftwl_*函数
调用哪个系列的函数,就必须链接对应的库。
内容的提问来源于stack exchange,提问作者Vadim Shestak
相关产品推荐
相关产品推荐

