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

Qt中通过.pro文件链接FFTW3库时出现未定义引用问题求助

Qt链接FFTW3时出现undefined reference to 'fftwf_malloc'的解决方法

核心问题

你代码里调用的是fftwf_*开头的单精度FFTW函数,但当前.pro文件只链接了双精度版本的fftw3库,且库路径配置存在错误,导致链接器找不到对应函数的实现。

解决步骤

  1. 修正库链接配置
    单精度FFTW库的名称是fftw3f,需要在.pro的LIBS中添加该库,同时修正库路径的绝对路径(原配置少了根目录的/):

    LIBS += -L/usr/local/lib -lfftw3 -lfftw3f
    

    注:如果只用到单精度函数,也可以只写-lfftw3f,保留-lfftw3不影响。

  2. 添加头文件搜索路径
    之前出现找不到<fftw3.h>的问题,是因为编译器没找到头文件目录,在.pro中加入:

    INCLUDEPATH += /usr/local/include
    
  3. 验证库文件存在性
    确认/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:29:59