news 2026/7/3 10:35:16

Qt6+Cmake 使用第三方组件发布的动态库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt6+Cmake 使用第三方组件发布的动态库

引言

本文主要介绍如何在Qt6 + CMake 项目中直接引用第三方库编译发布文件(头文件、.lib/.a 导入库、.dll/.so 动态库),而不通过源码编译的方式。

假设第三方库 mylib 的文件结构如下:

C:/dev/mylib/├── include/│ └── mylib.h ├── lib/│ ├── mylib.lib(Windows 导入库)│ └── mylib.a(Linux 静态/导入库)└── bin/(可选)└── mylib.dll(Windows 运行时)

CMakeLists.txt 配置示例:

#1.定义库的根路径(方便管理)set(MYLIB_ROOT"C:/dev/mylib")#2.添加头文件搜索路径target_include_directories(MyApp PRIVATE ${MYLIB_ROOT}/include)#3.添加库文件搜索路径target_link_directories(MyApp PRIVATE ${MYLIB_ROOT}/lib)#4.链接库文件(不需要写全路径,只需要库名)target_link_libraries(MyApp PRIVATE mylib # 在 Windows 上会找 mylib.lib,Linux 上会找 libmylib.a)

重要细节:
1、导入库 vs 动态库
在 Windows 上,编译动态库会生成两个文件:
mylib.dll —— 运行时需要(动态库)
mylib.lib —— 编译链接时使用(导入库)

target_link_libraries() 链接的是 .lib 导入库,而不是 .dll。
在 Linux 上,动态库是 libmylib.so,链接时直接使用 .so 文件。

2、运行时确保能找到 .dll / .so

  • Windows:把 .dll 文件复制到你的可执行文件(.exe)所在的输出目录。
  • Linux:设置环境变量 LD_LIBRARY_PATH 包含 .so 所在目录,或者也复制到可执行文件同目录。

完整示例:
假设你在 Windows 上,第三方库放在 D:/libs/mylib,源码如下:
CMakeLists.txt:

cmake_minimum_required(VERSION3.16)project(MyApp)find_package(Qt6 REQUIRED COMPONENTS Core Widgets)set(MYLIB_ROOT"D:/libs/mylib")qt_add_executable(MyApp main.cpp mainwindow.cpp)# 添加头文件路径target_include_directories(MyApp PRIVATE ${MYLIB_ROOT}/include)# 添加库路径target_link_directories(MyApp PRIVATE ${MYLIB_ROOT}/lib)# 链接库target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Widgets mylib)# 自动复制 DLL 到输出目录(仅 Windows)if(WIN32)add_custom_command(TARGET MyApp POST_BUILD COMMAND ${CMAKE_COMMAND}-E copy_if_different ${MYLIB_ROOT}/bin/mylib.dll $<TARGET_FILE_DIR:MyApp>)endif()

总结:

步骤关键命令
指定头文件路径target_include_directories(… PRIVATE 路径)
指定库文件路径target_link_directories(… PRIVATE 路径)
链接库target_link_libraries(… 库名)
运行时找 DLL复制到 .exe 同目录 或 设置环境变量

这种方式不依赖源码,完全基于已编译好的库文件,适用于你想固定使用某个特定版本库的场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 10:32:57

科大讯飞掉队真相:国产算力约束与通用大模型转型困局

1. 项目概述&#xff1a;一个技术老兵的困局&#xff0c;远比股价腰斩更值得深思2023年春天&#xff0c;ChatGPT像一道闪电劈开AI行业的沉寂天空。那时我正带着团队在合肥做教育信息化项目&#xff0c;客户办公室里挂着科大讯飞的定制化语音识别系统&#xff0c;屏幕上还跳着实…

作者头像 李华
网站建设 2026/7/3 10:32:34

CNKI-download:3步完成知网文献批量下载的终极Python工具指南

CNKI-download&#xff1a;3步完成知网文献批量下载的终极Python工具指南 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 还在为知网文献下载…

作者头像 李华
网站建设 2026/7/3 10:29:37

OpenClaw ACPX 配置指南:三文档协同实现智能体工具调用

1. 项目概述&#xff1a;这不是“配个插件”&#xff0c;而是一场智能体工作流的重新设计我第一次在 Windows 上敲下openclaw agent --agent coding-agent --message "用 opencode 创建登录组件"却收到一句“opencode 不可用&#xff0c;改用其他方式”时&#xff0c…

作者头像 李华
网站建设 2026/7/3 10:26:28

企业AI转型实战:从认知到落地的四步方法论

1. 企业AI转型的现状与挑战当前&#xff0c;AI技术已经从实验室走向产业应用的最前沿。根据麦肯锡最新调研数据显示&#xff0c;全球已有超过76%的企业将AI技术纳入战略规划&#xff0c;但真正实现规模化应用的企业不足15%。这种"高关注度、低落地率"的现象&#xff…

作者头像 李华
网站建设 2026/7/3 10:24:02

大型赛事为何强制部署自动驾驶接驳巴士?

1. 大型赛事现场&#xff0c;为什么自动驾驶巴士突然成了“标配”&#xff1f;2026年世界杯还没开赛&#xff0c;墨西哥、美国、加拿大三国联合发布的交通白皮书里&#xff0c;已经把自动驾驶接驳巴士列为场馆群核心运力配置——不是试点&#xff0c;不是展示&#xff0c;而是写…

作者头像 李华