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

在Qt Creator中使用pffft库时遭遇LNK2019链接错误

Qt Creator + CMake 引入pffft库遇LNK2019未解析外部符号问题解决

问题场景

用Qt Creator 12.0.1 + CMake构建Qt 6.6.2应用(Windows 10系统,MSVC 2019编译器),因项目需求引入轻量FFT库pffft(仅包含pffft.h头文件和pffft.c实现文件)。已将这两个文件添加至CMakeLists.txt,且源文件正确包含头文件,但构建时所有调用pffft库的函数均触发LNK2019未解析外部符号错误,最终导致链接失败。

之前尝试的操作及遇到的新问题:

  • 修改CMake的project指令为LANGUAGES CXX C:LNK2019错误消失,但出现编译器目录下的C1189标准库使用错误
  • 切换至MinGW编译器:LNK2019错误消失,但自动生成的UI头文件找不到qcustomplot.h
  • 确认pffft.h中已正确添加extern "C"声明

针对性解决方案

方案1:单独编译pffft为静态库(推荐,规避C/C++编译标准冲突)

将pffft.c单独编译成静态库,再链接到Qt项目,可给C文件单独指定编译标准,避免与C++标准冲突:

# 把pffft编译为静态库
add_library(pffft STATIC pffft.c)
# 指定pffft使用C99标准(pffft基本兼容C99)
target_compile_features(pffft PRIVATE c_std_99)
# 可选:添加优化编译选项
target_compile_options(pffft PRIVATE /O2)

# 你的Qt项目目标
add_executable(YourQtApp main.cpp 其他源文件...)
# 链接pffft静态库与Qt模块
target_link_libraries(YourQtApp PRIVATE pffft Qt6::Widgets 其他Qt模块...)

同时再次确认pffft.h的extern "C"包裹正确:

#ifdef __cplusplus
extern "C" {
#endif

// pffft的所有函数声明

#ifdef __cplusplus
}
#endif

方案2:调整MSVC的C/C++编译标准兼容

若不想单独编译静态库,修改project指令为LANGUAGES CXX C后,给C和C++文件分别指定编译标准,解决C1189错误:

project(YourQtApp LANGUAGES CXX C)

# 设置C++标准为Qt默认的C++17或更高
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置C标准为C99(适配pffft)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 添加所有源文件,确保pffft.c被识别为C文件
add_executable(YourQtApp main.cpp pffft.c 其他源文件...)
target_link_libraries(YourQtApp PRIVATE Qt6::Widgets 其他Qt模块...)

若仍有C标准相关警告或错误,可在CMake中添加以下选项屏蔽:

target_compile_options(YourQtApp PRIVATE $<$<COMPILE_LANGUAGE:C>:/wd4996>)

方案3:修复MinGW下qcustomplot.h找不到的问题

若想继续使用MinGW,解决UI头文件找不到qcustomplot.h的问题:

  • 在CMakeLists.txt中添加qcustomplot的头文件目录:
target_include_directories(YourQtApp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/qcustomplot所在目录)
  • 确保qcustomplot的头文件、源文件(若有)已正确添加到项目,或已编译为库并链接至项目。

内容的提问来源于stack exchange,提问作者AristoFane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:16:31