Qt creator生成动态库

一、Qt工程配置

建立工程,选择New Project -> Library -> C++ Library:
在这里插入图片描述

去除Qt库依赖,取消选择QtCore:
在这里插入图片描述

配置完成后,因为没有选择Qt相关的库,直接编译会报错,可以删除global.h文件,其余.cpp、.h文件的内容也可以换成自己的。除了文件中没有main()函数,其余操作和一般的编程实现功能没有区别。编译完成后可以生成动态库。
本文测试的动态库源码文件内容如下:

//**version.h**
#ifndef VERSION_H
#define VERSION_H
extern int outputVersion();
#endif // VERSION_H

//**version.cpp**
#include "version.h"
#include <stdio.h>

int outputVersion()
{
    float version = 3.0;
    printf("software version: %.1f \n", version);
    return 0;
}

二、.pro文件设置

TARGET = version表示生成的目标文件名为version;
设置TEMPLATE = lib,表示模板为动态库;
加上CONFIG += plugin,只生成一个.so文件,如果不添加,则会出现.so.1 .so.1.0 .so.1.0.0这类带版本号的软链接;
本文不依赖于Qt库,因此在.pro文件中设置了CONFIG -= qt;
qmake添加DEFINE +=变量的值作为编译器C预处理器宏(-D选项),与代码中加上#define的功能类似;

#-------------------------------------------------
#
# Project created by QtCreator 2022-08-30T10:09:54
#
#-------------------------------------------------

TARGET = version
TEMPLATE = lib
CONFIG += plugin
CONFIG -= qt

DEFINES += VERSION_LIBRARY


# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += version.cpp

HEADERS += version.h

unix {
    target.path = /usr/lib
    INSTALLS += target
}

进行编译后,生成动态库libversion.so:
生成动态库

三、查看可执行程序的依赖库

如果是用于PC端的程序,查看可执行文件的依赖库可以使用ldd(list dynamic dependencies)命令:

ldd <可执行文件名>

对于交叉编译生成的可执行文件以及动态库文件,ldd无法识别,可以使用objdump命令或者readelf命令查看文件的依赖库:

objdump -x image_process | grep NEEDED  
readelf -a image_process | grep NEEDED

显示结果如下:

 0x00000001 (NEEDED)         Shared library: [libopencv_core.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libopencv_features2d.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libopencv_imgcodecs.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libopencv_imgproc.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libopencv_objdetect.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libopencv_calib3d.so.3.4]
 0x00000001 (NEEDED)         Shared library: [libQt5Network.so.5]
 0x00000001 (NEEDED)         Shared library: [libQt5Core.so.5]
 0x00000001 (NEEDED)         Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)         Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)         Shared library: [libm.so.6]
 0x00000001 (NEEDED)         Shared library: [libgcc_s.so.1]
 0x00000001 (NEEDED)         Shared library: [libc.so.6]
 0x00000001 (NEEDED)         Shared library: [ld-linux-armhf.so.3]

参考链接

【1】https://blog.csdn.net/whatday/article/details/88561944

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题的意思是:在Linux下如何生成动态库Qt。 回答是:在Linux系统中,可以使用Qt构建系统(qmake)来生成静态动态库。在.pro文件中使用以下语句来生成动态库: template=lib target.path=/usr/local/lib target.name=MyLib CONFIG += shared名称为MyLib,它将被安装到/usr/local/lib目录下。 ### 回答2: 在Linux操作系统下,我们可以通过使用Qt生成动态库动态库是一种链接到可执行二进制文件中的代码,与静态不同的是,动态库只有在运行时才会被加载,而不是在编译时。这样可以有效地降低可执行文件的大小,并且允许多个应用程序共享同一个Qt提供了一些工具和命令,用于从一个应用程序项目构建动态库。 以下是在Linux系统中生成动态库的步骤: 步骤1:创建一个Qt工程项目 在Qt Creator中,选择“File”->“New File or Project”->“Library”->选择“C++ Library”->“Choose”->填写项目名称、路径和描述信息等,然后单击“Next”。选择“Dynamic Library”并保留默认选项,然后再次单击“Next”以设置选项。 步骤2:设计和实现代码 在Qt工程项目中设计和实现代码,将需要导出的类和函数添加到头文件中。在该文件头中使用Q_DECL_EXPORT宏修饰这些类和函数。这将确保这些类和函数将作为的一部分被正确导出。 步骤3:编译Qt Creator中单击“Build”以编译。在构建过程中,Qt Creator生成一个.so文件(用于Linux)或.dll文件(用于Windows)。 步骤4:使用 在使用的代码中,使用#include指令包含头文件,然后使用中导出的类和函数。 总之,通过以上步骤,我们可以在Linux操作系统中使用Qt创建动态库。这样可以使我们的程序变得更加灵活,增强程序的可复用性。 ### 回答3: 在Linux操作系统下,Qt生成动态库的方法如下: 1. 编写Qt动态库代码 首先,需要编写Qt动态库代码。通常我们可以用Qt Creator创建C++项目,选择动态库类型,在新建的项目中编写动态库的代码。在编写代码的时候,需要使用Qt的相关函数。 2. 配置项目的.pro文件 在Qt Creator中打开项目的.pro文件,进行配置,使其生成动态库。具体配置如下: TEMPLATE = lib # 指定项目类型为动态库 QT += core gui # 添加需要用到的Qt函数 TARGET = MyLib # 指定生成文件名 SOURCES += MyLib.cpp # 添加源代码文件 此外,还需要在.pro文件中添加以下配置,用于指定生成目标是一个动态库: CONFIG += shared DEFINES += MYLIB_LIBRARY # 定义变量,用于在生成动态库中引用 3. 编译和生成动态库Qt Creator中,选择菜单“Build”-->“Build All”,编译项目。编译成功后,在项目的构建目录下,生成文件名为libMyLib.so的动态库文件。 4. 在其他项目中使用动态库 在其他Qt项目中使用生成动态库,只需要在.pro文件中添加以下配置: LIBS += -L/path/to/lib -lMyLib 其中,-L指定动态库文件所在的目录,-l指定动态库的名称。这样,在进行编译和链接时,就可以正确地引用动态库函数了。 总结: Qt生成动态库的过程比较简单,只需要编写动态库代码和配置.pro文件即可。生成动态库可以在其他Qt项目中直接使用,方便快捷。使用动态库的好处是可以将代码模块化,提高代码的复用性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值