QtCreator里添加外部第三库、头文件路径的方法(.pro文件)

简介: QtCreator里添加外部第三库、头文件路径的方法(.pro文件)

一、前言

在项目开发过程中,经常需要用到第三方库,需要在QtCreator工程里指定第三库的路径、头文件路径、引用的库名称等等;并且可能还需要编写通用工程针对不同的编译器类型,位数选择不同的库,针对不同的操作系统环境选择不同的库;那么这些条件的区分都可以在QtCreator的pro工程文件里编写逻辑实现。


下面就介绍常用的添加库、头文件的方法,以libvlc、ffmpeg、opencv等常用的第三方库作为示例,编译器分别选择VS2017(32位)、MinGW(32位)进行测试。


二、添加第三方库与头文件

下面的例子里,第三方库、头文件都放在工程目录下,代码里路径直接用$$PWD取当前路径,再接库目录的路径。 程序测试的环境是win10(64bit)、Qt5.12.6


说明: 添加路径的时候左斜杠、右斜杠都是可以支持的。/ \


2.1 引用libvlc库示例

image.png

MSVC、MinGW编译器都可使用

在编译完成之后,需要把用到的动态库.dll文件拷贝到可执行文件exe同级目录下才能正常运行。

INCLUDEPATH += $$PWD\VLC\sdk\include   #VLC头文件包含目录
INCLUDEPATH += $$PWD\VLC\sdk\include\vlc\plugins   #VLC头文件包含目录
INCLUDEPATH += $$PWD\VLC\sdk\include\vlc   #VLC头文件包含目录
LIBS +=$$PWD\VLC\sdk\lib\libvlc.lib    #引用的VLC库文件
LIBS +=$$PWD\VLC\sdk\lib\libvlccore.lib

小知识: MSVC编译器使用libvlc库编译时需要在#include <vlc/vlc.h>之前,定义typedef __int64 ssize_t; 否则可能会报一堆未定义的错。 可以直接把typedef __int64 ssize_t; 写在#include <vlc/vlc.h> 上面一句。


代码里引用libvlc需要包含的头文件:

#include <vlc/vlc.h>

libvlc的测试代码: 打印库的版本

qDebug()<<"libvlc版本:"<<libvlc_get_version();
//打印结果:  libvlc版本: 3.0.12 Vetinari

2.2 引用ffmpeg库示例

(1). 方式1:适用于mingw、MSVC编译器

image.png

INCLUDEPATH+=$$PWD/ffmpeg/include
LIBS += -L$$PWD/ffmpeg/lib/ -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lpostproc -lswresample -lswscale
DEPENDPATH += $$PWD/ffmpeg/lib

(2). 方式2: 适用于mingw、gcc

image.png

INCLUDEPATH+=$$PWD/ffmpeg/include
LIBS+=$$PWD/ffmpeg/bin/av*
LIBS+=$$PWD/ffmpeg/bin/sw*
LIBS+=$$PWD/ffmpeg/bin/pos*

代码里引用ffmpeg需要包含的头文件:

//声明引用C的头文件
extern "C"
{
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <libavutil/avassert.h>
    #include <libavutil/channel_layout.h>
    #include <libavutil/opt.h>
    #include <libavutil/mathematics.h>
    #include <libavutil/timestamp.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libswresample/swresample.h>
    #include "libavfilter/avfilter.h"
    #include "libavutil/avassert.h"
    #include "libavutil/channel_layout.h"
    #include "libavutil/common.h"
    #include "libavutil/opt.h"
}

ffmpeg的测试代码: 打印库的版本

const char *p=av_version_info();
qDebug("%s\n",p);

2.3 引用opencv库示例

方式1: 适用于gcc、mingw

#linu平台的路径设置
linux {
message('运行linu版本')
#添加opencv头文件的路径,需要根据自己的头文件路径进行修改
INCLUDEPATH+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/include\
             /home/wbyq/work_pc/opencv-3.4.9/_install/install/include/opencv\
             /home/wbyq/work_pc/opencv-3.4.9/_install/install/include/opencv2
LIBS+=/home/wbyq/work_pc/opencv-3.4.9/_install/install/lib/libopencv_*
}
win32
{
    message('运行win32版本')
    #添加opencv头文件的路径,需要根据自己的头文件路径进行修改
    INCLUDEPATH+=C:/OpenCV_3.4.7/OpenCV-MinGW-Build-OpenCV-3.4.7/include \
                 C:/OpenCV_3.4.7/OpenCV-MinGW-Build-OpenCV-3.4.7/include/opencv \
                 C:/OpenCV_3.4.7/OpenCV-MinGW-Build-OpenCV-3.4.7/include/opencv2
    LIBS+=C:/OpenCV_3.4.7/OpenCV-MinGW-Build-OpenCV-3.4.7/x86/mingw/bin/libopencv_*.dll
}

小知识: 适用于mingw编译器的OpenCV库去这里下载: https://github.com/huihut/OpenCV-MinGW-Build


方式2: 适用于MSVC编译器–64位

opencv官网地址: https://opencv.org

opencv 2.x 才有X86的库,从3.X开始就只有X64的库了,3.X的版本编译只需要加一个库非常方便;下面的代码示例就是使用的opencv3.4.x的库,MSVC编译器选择的是VS2017 64bit。

INCLUDEPATH += $$PWD/opencv/build/include\
INCLUDEPATH += $$PWD/opencv/build/include/opencv\
INCLUDEPATH += $$PWD/opencv/build/include/opencv2
LIBS += -L$$PWD/opencv/build/x64/vc14/lib\
         -lopencv_world320d
目录
相关文章
|
编解码 容器
QML/Qt Quick anchors.fill 的使用(二)
QML/Qt Quick anchors.fill 的使用
538 0
|
9月前
|
人工智能 开发框架 决策智能
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
谷歌开源的Agent Development Kit(ADK)是首个代码优先的Python工具包,通过多智能体架构和灵活编排系统,支持开发者在百行代码内构建复杂AI代理,提供预置工具库与动态工作流定义能力。
1735 3
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
|
10月前
|
人工智能 缓存 程序员
大模型文生图服务API设计原来如此简单(1)
文生图大模型的API设计其实很简单!无论是Midjourney这样的商业产品,还是ComfyUI这样的开源工具,它们的核心API设计都遵循着相似的简单原则。
440 1
|
安全 物联网 编译器
Zig 教程
Zig 教程
705 1
|
Java 测试技术 API
拼多多 API 接口申请通过后如何进行测试?
拼多多 API 接口申请通过后,需按以下步骤测试:1. 仔细研读接口文档;2. 搭建测试环境,准备开发工具和模拟请求工具;3. 编写测试代码或使用测试工具;4. 设计测试用例,包括正常、异常和边界情况;5. 验证测试结果,检查返回值和错误处理;6. 记录和分析测试结果,确保 API 的稳定性和性能。
|
网络性能优化 数据安全/隐私保护
什么是国际专线网络?国际专线网络的特点
国际专线网络是连接不同国家和地区的专用通信线路,提供高速、可靠的数据传输服务。它具备高带宽、专用通道、高安全性、广泛覆盖和服务质量保障等优点,适用于跨国企业和组织的高效通信需求。然而,其建设和维护成本较高,需综合考虑。
1066 3
|
SQL 运维 监控
索引对MYSQL性能的影响
索引到底对性能有多少影响? 这个问题估计是很多MySQL小白好奇的问题。当然我也是一样。因为之前的时候,并没有对索引有太多的注意,而且之前的工作经历,因为数据量很小,索引所起到的作用并不是很大,所以也没有太大注意。
446 0
|
存储 编解码 算法
LabVIEW如何实现多张图拼接
LabVIEW如何实现多张图拼接
382 0
|
SQL 存储 数据库
实时数仓 Hologres产品使用合集之如何将非分区表转换为分区表
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
存储 编译器 程序员
C/C++中的内建函数介绍:介绍C/C++中内建函数的基本概念、用途和作用
C/C++中的内建函数介绍:介绍C/C++中内建函数的基本概念、用途和作用
476 0