Qt中正确引用外部头文件和库文件的方法和注意点

2023-11-10


要引入外部库,其主要便是正确编写 pro文件。

一、什么报错是外部库导入错误导致的

  1. 诸如xxxxxxx.cpp:1627: error: ‘sdk’ was not declared in this scope,顾名思义,未声明,往往就是找不到头文件导致。
  2. 诸如xxxxxxx.cpp:1624: error: undefined reference to这一类报错,顾名思义,未定义,往往是找不到库文件导致。

二、解决外部库使用的方法

(一)写入系统环境变量中的外部库调用

在Qt中,“项目”下的“构建设置”下有一个“构建环境”,一般默认使用的是系统环境变量,在“运行设置”下的“Run Environment”一般为使用构建环境,即也是使用的系统环境变量。因此可知,在Qt中调用头文件以及库文件,与系统环境变量是直接相关的。

1、解释说明

  1. 在Windows中,环境变量就是看“Path”下的配置项,不论是头文件还是库文件所在的文件夹位置,都是写在这下面
  2. 在Linux中,与Windows不同的是,与头文件相关的默认环境变量就是/usr/include/usr/local/include这两个目录下。与库文件相关的默认环境变量除了/usr/lib/usr/local/lib(lib可能为lib64,一样的效果)这两个目录下,还包含LD_LIBRARY_PATHLIBRARY_PATH,前者为运行库时使用,后者为构件库使用,但好像前者在构件库也生效。
  3. 写在系统环境中的头文件就可以直接使用了。

2、使用演示

1.头文件

使用#include <xxxx.h>调用。

2.库文件

在Qt工程文档中的xx.pro中,使用LIBS添加库文件,添加所需库文件时使用的名称,为-l加库文件名称(如前面有lib,去掉lib,后面的后缀不要),比如添加libosg.so库文件,写法如下:

LIBS+=-losg //+=的意思是可以直接追加

如果需要添加的库文件较多,可以这么写:

OSGLIBS=-losg -losgDB -losgGA
LIBS+=$$OSGLIBS

(二)未写入系统环境变量中的外部库调用

1、解释说明

  1. 头文件则需要将头文件所在文件夹,或者所在文件夹之前的上几级文件夹写入pro文件中,使用到的属性为INCLUDEPATH
  2. 库文件的同样需要将库文件所在的文件夹写入pro文件夹中,使用的属性为QMAKE_LIBDIR

2、使用演示

1.头文件

pro文件中:
windows下:

osg_dir="C:\test\osg"  //在双引号中左斜右斜都一样
INCLUDEPATH+=$$osg_dir/include //当然也可以是别的文件夹路径和名称

linux下:

INCLUDEPATH+=/home/test/osg

这样便能调用文件夹下的头文件了,注意,如果此时文件夹下还有子文件夹,可以有两种方法
一种是将后续目录写在调用位置,如下:

#include <test/xxx.h>

另一种是将目录写到INCLUDEPATH后面,一直到这个头文件,如下:

INCLUDEPATH+=/home/test/osg/test
#include <xxx.h>
1.库文件

pro文件中添加如下内容:

osg_dir="C:\test\osg"  //在双引号中左斜右斜都一样
QMAKE_LIBDIR+=osg_dir/lib  //这个是库文件所在的文件夹路径及名称 
OSGLIBS=-losg -losgDB -losgGA
LIBS+=$$OSGLIBS

三、总结

  1. 环境变量中有的则直接调用。
  2. 环境变量没有的将路径写在pro文件夹中,然后调用。
  3. 注意pro文件的语法正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中正确引用外部头文件和库文件的方法和注意点 的相关文章

  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • 如何创建QWidget的屏幕截图?

    我在 Qt Creator 中做作业 在其中绘制 QWidget 并且需要保存此 QWdiget 的某些部分 我试图解决这个问题 QPixmap pixmap pixmap copy rectangle rectangle is part
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • QtCreator 调试暂停停在代码而不是汇编处

    如何配置 QtCreator 以便在调试并按下暂停时它会显示当前正在处理的代码 现在显示汇编 无法在任何地方找到有关此问题的答案 我使用的是 Windows 7 我在 Ubuntu 16 04 中使用 Qt Creator 4 2 2 时遇
  • QGraphicsScene::clear 不会改变 sceneRect

    我有一个 QGraphicsScene 场景 和 QGraphicsView graphicsView 我有一个画图的方法 当我需要重绘所有图形时 我调用这个方法 一切都好 但我意识到 scene gt clear 不会改变 sceneRe
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • QTimer 一点也不准确?

    运行在 Windows7 64 位机器上 具有非常强大的 CPU 8 核 16 线程 我使用 QTimer 以 50Hz 触发函数调用 但我最终得到了 30Hz 函数调用本身肯定需要不到 10 毫秒才能完成 整个过程发生在一个单独的线程中
  • Qt 插槽是否与其他代码并行运行?

    在此函数示例中 void MyClass myFunction emit MySignal1 emit MySignal2 如果我有slot1倾听MySignal1 and slot2倾听MySignal2 1 Is slot1总是会在之前
  • QT从QTableWidgetItem继承到Widget并覆盖'<'运算符

    我想要一个QTableWidget具有定制的某些单元QProgressBars 并且我希望能够对包含这些的列进行排序 我的定制QProgressBar继承自两者QProgressBar and QTableWidgetItem 并且我正在覆
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
  • Mac 上的 Qt — 如何访问帮助菜单中的“搜索”

    我正在将我的 Qt 应用程序移植到 Mac OS X 在 Windows Linux 上 我使用 QLineEdit 在帮助菜单中提供搜索功能 In Mac OS X I saw something like this is built i
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码

随机推荐

  • 安装webpack及使用less-loader出现的错误

    webpack安装 使用less loader报错 Module build failed TypeError loaderContext getResolve is not a function webpack是一个前端模块打包工具 与g
  • Ceph集群中指定OSD 创建 pool

    导读 如何利用crush来对不同数据指定不同设备的osd存储 这边我是用虚拟机演示 所以都是hdd 这边假设osd0 2 4为ssd设备 osd 1 3 5为sata设备 背景 在我们的ceph集群中 可能不只有sata盘或者ssd盘 有些
  • 7、Shiro+SpringMVC+oracle+maven整合

    本章节主要介绍Shiro SpringMVC oracle maven整合 并实现shiro的身份验证和授权 建表并插入数据 1 用户表 CREATETABLEusers Table user id number 10 primarykey
  • leetcode-找出数组中的重复数字

    我们让最终的nums序列其索引号与数值相等 即0号索引位置上的数值是0 1号索引位置上的数值是1 当前nums i 没有放到正确的坑上 并且那个正确的坑上的数与那个坑是不匹配的 那么就要不停地交换 交换到不能交换的时候 就要判断一下 是不是
  • springboot毕设项目《C语言程序设计》题库管理系统39b5j(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目 C语言程序设计 题库管理系统39b5j java VUE Mybatis Maven Mysql 项目运行 环境配置 Jdk1 8 Tomcat8 5 Mysql HBuilderX Webstorm也行 Ec
  • C# 获取任务栏托盘通知区域中某个程序小图标位置

    一个小项目中需要用刀点击任务栏右下角通知区域的小图标 从而触发事件 其中比较容易出问题的地方是 public bool FindNotifyIcon IntPtr hTrayWnd ref Rect rectNotify UInt32 tr
  • 二、Qt定时器与文本编辑器制作《QT 入门到实战》

    学习目标 了解 qt 的 pixmap 了解 qt 的 label 如何显示图片 了解定时器的开启 了解定时器的关闭 了解文件如何进行读取 了解 QFileDialog 的使用 了解了一个文本编辑器的基本编写 巩固了 connect 的使用
  • 安装liunx双系统总结

    安装liunx双系统总结 参考文章 安装liunx详尽文章 https www cnblogs com masbay p 10844857 html 首先将硬盘分好区 我是双硬盘 在win10安装的硬盘内 C盘里压缩出200MB的空间 另一
  • 真机安装Linux Centos7

    准备工具 8G左右U盘 最新版UltraISO CentOS7光盘镜像 操作步骤 下载镜像 地址 http isoredirect centos org centos 7 isos x86 64 安装刻录工具UltraISO 刻录镜像到U盘
  • (React入门)组件通信

    1 父组件向子组件通信 props 父组件直接通过props向子组件传递需要的信息 import React Component from react 子组件 class Child extends Component render con
  • 怎么搭建微服务架构?

    我要何时使用微服务架构 又如何将应用程序分解为微服务 分解后 要如何去搭建微服务架构 同时 在微服务架构中 因为会涉及到多个组件 那么这些组件又可以使用什么技术来实现呢 接下来的几个小节中 我们将对这些问题进行详细的讲解 微服务的拆分 对于
  • Jenkins

    Jenkins jenkins定义 jenkins功能 tomcat项目部署 jenkins安装 安装后的jenkins的配置 Jenkins jenkins定义 jenkins tomcat 部署 安装 jenkins 是一个开源软件项目
  • 栈的概念和基本使用

    栈 Stack 是一种线性序列结构 其操作仅限于逻辑上特定的一端 即新元素只能从栈的一端插入 也只能从栈的一端弹出 允许操作的一端叫做栈顶 禁止操作的一端叫做栈底 插入元素称为入栈 弹出元素称为出栈 栈中各个元素的操作次序遵循所谓的后进先出
  • 涅普2021训练营-MIsc(部分)

    bin txt 打开附件发现是一大串的二进制字符串 使用python直接转换成16进制 最好别用网页转换 字符串太长了 也不需要创建什么函数 直接进制转换 参考格式 hex int 字符串 2 将得到的16进制吗复制到文本 将0x删除后复制
  • git 服务端钩子做代码检查

    需求分析 在代码修改后可以对代码进行检查 比如代码规范检查 代码构建 单元测试等 我们需要禁止成员推送不符合规范的代码到服务端 Git 钩子能在特定的重要动作发生时触发自定义脚本 钩子分为客户端和服务器端两类 使用客服端钩子可以在commi
  • 字符游戏-智能蛇

    字符游戏 智能蛇 一 VT 100 终端标准 这里按照老师的课件要求 体验一下VT 100 输入输出功能以及清屏操作 代码直接复制课件中代码 这里就不再放一次了 直接给出运行效果 gcc sin demo c osin out lm sin
  • OpenAI开发系列(一):一文搞懂大模型、GPT、ChatGPT等AI概念

    全文共5000余字 预计阅读时间约10 20分钟 满满干货 建议收藏 本文目标 详细解释大型语言模型 LLM 和OpenAI的GPT系列的基本概念 一 什么是大模型 大型语言模型 也称大语言模型 大模型 Large Language Mod
  • 解决Centos7没有ens33

    进入centos7操作 ifconfig ens33 up systemctl stop NetworkManager systemctl disable NetworkManager ifup ens33 systemctl restar
  • explain查看索引使用

    CREATE TABLE test id int 11 NOT NULL name varchar 20 DEFAULT NULL dep id int 11 DEFAULT NULL age int 11 DEFAULT NULL tt
  • Qt中正确引用外部头文件和库文件的方法和注意点

    Qt中正确引入外部库文件的方法和注意点 一 什么报错是外部库导入错误导致的 二 解决外部库使用的方法 一 写入系统环境变量中的外部库调用 1 解释说明 2 使用演示 1 头文件 2 库文件 二 未写入系统环境变量中的外部库调用 1 解释说明