详解Qt添加外部库

news2024/11/24 8:58:03

在Qt项目中添加外部库是一项常见任务,无论是静态库还是动态库都需要正确的配置才能让项目顺利编译链接。以下是详细步骤和不同场景下的配置方法:

方法一:手动编辑.pro文件

  1. 添加头文件路径
    在Qt项目中的.pro文件中使用INCLUDEPATH变量指定外部库头文件的路径,以便编译器能找到对应的头文件。

    INCLUDEPATH += /path/to/external/library/include
    

    如果有多层目录,可以添加多个路径:

    INCLUDEPATH += /path/to/external/library1/include \
                  /path/to/external/library2/include
    
  2. 添加库文件路径和链接库
    使用LIBS变量指定外部库文件的位置以及要链接的具体库名。 -L 指定库文件的路径, -l 后面跟的是不带前缀和后缀(通常是 .lib.a 对于静态库,.dll.so 对于动态库)的库名。

    win32:LIBS += -L/path/to/external/library/lib -lmylibrary
    unix:!macx: LIBS += -L/path/to/external/library/lib -lmylibrary
    macx: LIBS += -L/path/to/external/library/lib -lmylib.dylib
    

    如果是动态库且需要在运行时找到库,对于Windows,通常无需额外操作;但在Linux和MacOS上,可能需要将库路径添加到运行时环境变量 LD_LIBRARY_PATH 中。

  3. 考虑库依赖
    如果外部库还依赖其他的系统库,也需要将这些依赖库添加到LIBS中。

    LIBS += -L/path/to/system/libs -lsystemdependency
    

方法二:Qt Creator图形界面添加库

  1. 右键项目
    在Qt Creator中,右键点击项目,在弹出菜单中选择“添加库”(Add Library)。
    在这里插入图片描述

  2. 选择库类型
    在添加库对话框中,选择“外部库”(External Library),然后按照向导指示操作。
    在这里插入图片描述

  3. 指定库文件
    指定库文件的路径,可以选择库文件的绝对路径或相对路径。对于静态库,选择.a.lib文件;对于动态库,选择.dll.so.dylib文件。
    在这里插入图片描述

  4. 添加头文件路径
    如果Qt Creator允许,还可以在此过程中指定头文件路径,使其自动添加到INCLUDEPATH中。

  5. 确认添加
    完成向导后,Qt Creator会自动更新项目文件(.pro文件),添加相应的库路径和链接选项。
    最终同样的,在pro文件中自动添加代码

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../XXX/XXX/Module/common/dataHelper/lib/ -ldataHelper
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../XXX/XXX/Module/common/dataHelper/lib/ -ldataHelperd
else:unix: LIBS += -L$$PWD/../../XXX/XXX/Module/common/dataHelper/lib/ -ldataHelper

INCLUDEPATH += $$PWD/../../XXX/XXX/Module/common/dataHelper
DEPENDPATH += $$PWD/../../XXX/XXX/Module/common/dataHelper

注意事项

  • 动态库和静态库的链接方式有所不同,动态库在运行时需要可执行文件能找到,而静态库则是在编译时就链接到目标程序中。
  • 不同操作系统有不同的库命名规则和链接约定,比如Windows下的.lib文件可能是静态库或者动态库的导入库,而Linux下则是纯静态库或共享库(.so)。
  • 如果库有版本区别,确保链接的是项目所需版本。
  • 在多平台开发时,要注意库在不同平台上的兼容性和路径差异。

以上两种方法可以根据实际情况灵活选择,确保库正确链接和使用之后,项目就能顺利编译并通过对外部库功能的调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1588995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线视频教育平台|基于Springboot的在线视频教育平台系统设计与实现(源码+数据库+文档)

在线视频教育平台目录 基于Springboot的在线视频教育平台系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台: 2、后台 用户功能模块 教师功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)

前言: 前一阵子一直在捣鼓人大金仓数据库,虽然国产化的数据库很值得夸赞,但是网上的资料确实少的可怜。特此记录一下我在学习这个数据库的心酸历程。 安装就看这个大哥的,我之前安装就是看的他的,非常靠谱。 linux安装…

海外代理IP如何助力YouTube广告投放?

一、海外代理的角色与优势 拓展地理访问: 海外代理允许您从其他国家或地区的IP地址进行网络访问。通过使用海外代理,您可以绕过部分限制,实现访问YouTube和其他平台的目的。扩展受众: 利用海外代理,您可以将广告投放面…

每日一题---OJ题: 相交链表

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---相交链表,准备好了吗? Ready Go! ! ! emmm,看这道题好像不怎么难,我们一起画图分析分析 上图中,A链表有5个结点,分别为 a1,a2,c1,c2,c3 ; B链表有6个结点,分别为 b1,b2,b3,c1,c2,c3 ; A链表和B链表在c1结点相交 …

【Python】数学函数和特殊内置函数大揭秘:Python中隐藏的秘密武器

欢迎来CILMY23的博客 本篇主题为 数学函数和特殊内置函数大揭秘:Python中隐藏的秘密武器 个人主页:CILMY23-CSDN博客 个人专栏系列: Python | C语言 | 数据结构与算法 | C 感谢观看,支持的可以给个一键三连,点赞关…

Partisia Blockchain:被严重低估的隐私区块链生态

在今年 3 月,隐私公链 Partisia Blockchain 迎来了重要的进展,该生态通证 $MPC 上线了交易所,目前 $MPC 通证可以在 Kucoin、Gate、BitMart、Bitfinex、Bitture 等平台交易,并将在不久后上线 MEXC 平台。 在上个月上线市场至今&am…

【Linux】进程间通信——system V版本 共享内存

目录 共享内存 原理 实践 shmget() 创建共享内存 shmctl() 删除共享内存 shmat() 挂接进程和共享内存 shmt() 进程和共享内存去关联 共享内存的特性 优势 劣势 用共享内存实现进程间通信 共享内存 原理 两个进程的PCB各自维护着一个进程地址空间。当两个进…

VsCode 安装Jupyter Notebook

VsCode 安装Jupyter Notebook 安装 1、打开 VSCode 编辑器,点击界面左端的【扩展】栏; 2、在【搜索框】中输入python,点击第一个Python,检查是否已经安装 python 插件,没安装的点击安装;已安装的继续第3步…

32单片机入门持续更新中

配套资料为野火霸道V2 初识 STM32 4.1 什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起 来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今…

C++数据结构与算法——动态规划子序列系列

C第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C查漏补缺,尤其是树的部分。这一部分计划一个月 (2024.1.30-2024.4.10已完结),任务量确实有点大,包括春…

Mysql主从同步原理

master每次提交事务时都会将数据变更记录到二进制文件BINLOG中,binlog文件主要记录除查询以外的DDL和DML,slave的IO线程读取master的BINLOG文件,并写入中继日志Relay log文件中,然后slave的SQL线程读取relay log文件并重做事务映射…

核心api实操-Activiti7从入门到专家(5)

背景 上一节已经搭建了,具体的开发环境,数据库,并且找了一个可以用bpmnjs流程设计器,这一些,我们对核心api做个基础的实操,有个感性的认知,另外对数据库和基本数据流动有个理解。 部署 模板部…

Deblurring 3D Gaussian Splatting去模糊3D高斯溅射

Abstract 摘要 Recent studies in Radiance Fields have paved the robust way for novel view synthesis with their photorealistic rendering quality. Nevertheless, they usually employ neural networks and volumetric rendering, which are costly to train and impede…

Web中使用Weblogic用户

WebLogic用户,组设置 1. 登录weblogic console, domain结构中选择Security Realms,显示安装时默认创建的Realm : myrealm 2. 点击myrealm, 选择 users and Group, 追加用户和组 选择既存的权限组追加到新规的组中,赋予…

【jumpserver-02】离线安装jumpserver

https://docs.jumpserver.org/zh/v3/installation/setup_linux_standalone/offline_install/#1 环境准备 mysql数据库 create database jumpserver default character set utf8mb4;create user jumpserver% identified by jumpserver;grant all on jumpserver.* to jumpserver…

Arrow Path (DFS BFS)

//新生训练 #include <iostream> #include <algorithm> #include <cstring> #include <queue> using namespace std; using PII pair<int, int>;const int N 2e5 5; const int inf 0x3f3f3f3f; int n, m; int l; string s[2]; int dx[] {0,…

CorelDRAW苹果版提示请重新连接具有文件位置的设备...的解决方法

今天小编想更新一下CorelDRAW2024苹果版&#xff0c;但升级完成依次提示“请重新连接具有文件位置的设备&#xff0c;或选择新文件夹。同时&#xff0c;内容将保存在Corel 默认位置。您可以在恢复文件位置之后移动内容”和“尝试重新启动计算机和应用程序。如果这些操作还是不能…

LeetCode-64. 最小路径和【数组 动态规划 矩阵】

LeetCode-64. 最小路径和【数组 动态规划 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;动态规划五部曲。定推初遍举解题思路二&#xff1a;动态规划优化空间&#xff0c;直接改grid解题思路三&#xff1a;dfs 题目描述&#xff1a; 给定一个包含非负整数的 m x n 网格 …

SpringBoot入门(Hello World 项目)

SpringBoot关键结构 1.2.1 Core Container The Core Container consists of the Core, Beans, Context, and Expression Language modules. The Core and Beans modules provide the fundamental parts of the framework, including the IoC and Dependency Injection featur…

掌握JMeter HTTP 请求头:简单易懂

在深入研究 JMeter 的过程中&#xff0c;任何涉及性能测试或接口验证的专业人员都会认识到&#xff0c;合理配置HTTP请求头部信息是实现精确测试的关键步骤之一。不同情景下&#xff0c;如数据提交形式的不同&#xff08;例如 JSON、XML 等&#xff09;&#xff0c;或是需要通过…