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

Qt5项目CMake编译报错:链接找不到engine-lib的原因排查

问题根源与修复方案

嘿,我一眼就看到问题出在哪了——你在src/CMakeLists.txt里用错了add_subdirectory命令!

为什么加Qt5Sql后会报错?

看你这行代码:

add_subdirectory( db engine )

add_subdirectory的语法是一次只能添加一个子目录,第二个参数是用来指定这个子目录的编译产物输出路径的,不是用来同时添加多个子目录的。这行代码的实际效果是:

  • 只把db子目录加入了构建流程
  • 把db的编译文件都放到了engine目录下
  • 完全没处理engine子目录!

这就解释了为什么移除db相关配置后能正常编译——那时候你相当于跳过了这行错误的命令,CMake才会正确处理engine子目录,构建出engine-lib。而当你加入Qt5Sql并启用db子目录时,这行错误的命令直接把engine子目录的构建给跳过了,链接器自然找不到engine-lib。

怎么修复?

把src/CMakeLists.txt里的子目录添加代码改成分开写:

include(Qt)
# 分别添加db和engine两个子目录,不要合并成一行
add_subdirectory(db)
add_subdirectory(engine)

add_executable(blacklist-engine-cli main.cpp)
target_link_libraries( blacklist-engine-cli Qt5::Core Qt5::Sql engine-lib db-lib )

这样CMake会分别处理两个子目录,正确构建db-lib和engine-lib两个库,链接器就能找到需要的文件了。

额外小提示

你的db-lib已经通过target_link_libraries依赖了Qt5::Sql,其实blacklist-engine-cli不需要再重复链接Qt5::Sql——CMake会自动传递依赖关系,不过重复写也不会导致问题,只是有点冗余。

验证步骤

先清空build目录避免缓存影响:

rm -rf build/*

然后重新构建:

cd build && cmake .. && make

应该就能顺利编译通过了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:07:42