Qt Creator使用QuickFIX库编译时出现LNK2019与LNK2001链接错误
解决Qt Creator + QuickFIX + MSVC2015 32位项目的LNK2019链接错误
我之前在搭建QuickFIX和Qt Creator的MSVC 2015 32位项目时,也碰到过一模一样的LNK2019未解析外部符号问题,针对FIX::DoubleConvertor::fast_strtod这个符号的缺失,给你整理几个亲测有效的解决方向:
严格匹配QuickFIX库的编译环境
这是最常见的原因:你必须确保所用的QuickFIX库是MSVC 2015 32位编译生成的,绝对不能混用MinGW编译的库或者64位版本。如果是自己编译QuickFIX,要确认构建工具链选的是MSVC2015 x86;同时还要对齐运行时库选项——如果Qt Creator项目用的是/MD(多线程DLL),那QuickFIX编译时也要选相同的/MD,不能一个用/MD一个用/MT(多线程静态),否则会出现符号不匹配。检查Qt Creator的链接配置
打开Qt Creator的项目构建设置:- 到链接器->输入->附加依赖项,确认已经添加了QuickFIX对应的库文件(比如
quickfix.lib或quickfixmt.lib,根据你编译的库类型选择); - 到链接器->常规->附加库目录,把QuickFIX库所在的路径添加进去,避免编译器找不到库文件。
- 到链接器->输入->附加依赖项,确认已经添加了QuickFIX对应的库文件(比如
确认DoubleConvertor的编译开关
QuickFIX里的fast_strtod是可选实现,部分编译配置下会被禁用:- 查看QuickFIX的
DoubleConvertor.h头文件,检查是否定义了FIX_USE_FAST_STRTOD宏; - 如果没有,要么在Qt Creator项目的C++->预处理定义里添加
FIX_USE_FAST_STRTOD,要么在编译QuickFIX时开启这个编译选项,确保fast_strtod的实现被编译进库中。
- 查看QuickFIX的
清理重建项目
有时候Qt Creator的缓存会导致奇怪的链接问题:直接删除项目的build目录,重新运行qmake,再进行全量编译。同时也要确保QuickFIX的库文件是最新编译的,没有残留旧版本的符号。
内容的提问来源于stack exchange,提问作者Gaojie Li
相关产品推荐
相关产品推荐

