IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> linux下Qt调用C++库文件(.so)程序实现 -> 正文阅读

[C++知识库]linux下Qt调用C++库文件(.so)程序实现


主要内容

如标题所示,在linux下使用qtcreator创建项目调用C++库文件,并成功运行。

一、编程环境及实现方法

系统:ubuntu16.04
IDE:Qtcreator5.9.9
编程语言:C++
第三方库:opencv2.4.13.6
自制C++共享库:libdisplay.so

实现方法:创建一个新项目,调用自制C++的库文件,显示一张图片,测试库文件是否能正常使用。

二、项目实现

1.创建项目

进行新项目创建,编写调用库文件的C++程序。

  1. 文件-新建文件或项目
    在这里插入图片描述

  2. 由于是非ui项目,且创建项目后直接导入现有C++文件,选择 “其他项目”-“空qmake项目”
    在这里插入图片描述

  3. 填写项目名及项目保存路径,下面2步直接默认,完成创建项目。
    在这里插入图片描述

  4. 导入头文件、主程序文件
    编辑模式下,选中工程目录点击右键,“添加现有文件”,添加所需文件(主要是 .cpp 和 .h 文件)
    添加完成后,qtcreator会自动识别是头文件或源文件,生成相应目录,如下图所示。
    在这里插入图片描述
    头文件libdisplay.h

int displayPic();

源文件 displaypic_callso.cpp

#include "./include/libdisplay.h"
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
        displayPic();
        waitKey();
        return 0;
}

2.导入库文件

将调用的库文件导入,编译程序及运行。

  1. 工程目录右键-添加库-外部库-选择.so库文件对应的文件及文件夹
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    完成后,在项目的.pro文件中自动增加了如下内容,即libdisplay.so库文件添加成功。
    在这里插入图片描述
  2. 文件导入成功,进行项目编译,生成可执行文件,然后将图片放在可执行文件所在文件夹,运行程序。
    在这里插入图片描述

三、项目中遇到的问题

  1. 找不到头文件
    问题描述:刚开始包含头文件直接写的是#include "libdisplay.h",显示找不到头文件,后改为#include "./include/libdisplay.h正常(注:本工程头文件是在子文件夹下)
    解决方法:

    • 如果头文件在工程文件夹目录下(不包括工程文件夹下的子文件夹),那一般先检查仔细是否头文件名字写错了,如果正确可以build clean然后重新构建一下
    • 如果是头文件在工程文件夹子文件夹下,那么可参考.pro文件的.h路径,在包含该头文件时也一定要有这个路径
  2. 修改默认构建目录
    问题描述: 生成的build文件夹不在保存工程的文件夹下,而是与保存工程的文件夹同级,为了管理方便,修改默认构建目录保存路径至工程所在文件夹下。

    默认的构建目录:工具–选项—构建和运行—概要—Default build directory
    默认为:../build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}

    1)../ 表示当前目录的父目录(这部分用来指定构建目录处在什么位置,其中当前目录是指当前工程目录下)

    2)build- 固定不变字符,在目录名中原样显示

    3)%{CurrentProject:Name} 变量值,表示当前的工程名

    4)- 固定不变字符,在目录名中原样显示

    5)%{CurrentKit:FileSystemName} 变量值,当前构建套件名

    6)- 固定不变字符,在目录名中原样显示

    7)%{CurrentBuild:Name} 变量值,表示当前构建类型,比如是Debug还是Release
    解决方法:
    1) 工具–选项—构建和运行—概要—Default build directory,修改build文件保存路径,本文项目改为“./build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}”,即保存在当前工程目录下,文件名按默认输出。
    注意:修改构建目录对当前正在打开的工程无效,需要在下一次使用Qt Creator新建工程时才开始起效。
    在这里插入图片描述
    2) 若想此项目生效,需删除.pro.user文件,重新打开项目,重新创建项目:工程模式下,点击配置工程,如图所示,配置完成后,编译运行,生成的build文件夹就在工程文件夹下了。
    在这里插入图片描述
    在这里插入图片描述

  3. 编译出现:-1: error: cannot find -lGL问题
    问题描述:产生问题的原因是由于Qt 找不到 OpenGL 的动态链接库(libGL.so)。OpenGL 在大部分 Linux 发行版中都是默认安装的,包括 Ubuntu、CentOS 等,找不到该链接库一般都是路径不对。
    Qt 默认在 /usr/lib/ 目录下查找动态链接库,但是很多 Linux 发行版将 OpenGL 链接库放在其它目录,例如我使用的是 CentOS 7,OpenGL 链接库位于 /usr/lib64/ 目录,而对于 Ubuntu,OpenGL 链接库位于 /usr/lib/x86-linux-gnu/mesa/ 目录。只要我们把 libGL.so 拷贝到 /usr/lib/ 目录,或者在 /usr/lib/ 目录下为 libGL.so 创建一个链接,就能解决问题。
    在这里插入图片描述
    解决方法
    Ubuntu自带的 OpenGL 链接库在后缀中添加了版本号,但是 Qt 在链接阶段查找的 OpenGL 链接库是不带版本号的。因此,可以在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接。
    可通过 locate libGL命令查找 OpenGL 链接库所在路径。

    创建软链接,终端输入如下命令(普通用户可能无权限创建链接,可使用root用户)

sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so

在这里插入图片描述
4. 编译报错:/usr/local/lib/libopencv_highgui.so.2.4:-1: error: error adding symbols: DSO missing from command line
原因:未找到库文件。
解决方法:按“二、项目实现”-“2.导入库文件”,将缺失的库文件导入,重新编译项目即可。


总结

刚开始接触相关内容,记录下过程,方便自己也方便他人,欢迎讨论。
如果觉得本文写的不错的,欢迎点赞、收藏、评论哦~

参考链接:
1.Qt入门学习——Qt Creator的使用
2.Qt Creator怎样更改默认构建目录
3.Linux的Qt编译出现👎 error: cannot find -lGL问题的解决方法

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 10:32:07  更:2021-07-23 10:35:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 6:23:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码