QT 静态链接库和动态链接库
qt windows linux
dll .dll .so
lib 对应 a archiver的缩写 为静态库,是好多个.o合在一起,用于静态连接
dll 对应 so share object 共享库
lib文件:(依据编译器) MSVC编译器是生成.lib 文件,文件名不变。 mingw编译器生成.a 文件,此外会在目标名称(即在.pro 文件中的TARGET)前面加lib
dll文件:(依据平台) windows平台是.dll 文件,unix平台是.so ,mac是.dylib
静态链接库
设计导出类,包括ui窗口类,对话框类。
在.pro文件中
TEMPLATE = lib
CONFIG += staticlib
TARGET =
编译静态链接库时,不管是debug还是release版本,编译生成都是相同的文件名,并不会为debug版本自动添加一个字母“d”.
但是在debug或者release版本编译应用程序时,需要使用相应版本库文件。所有需要手动将debug版本的静态库更名,即在文件名后加上字母“d”,如 myStaticLib.lib => myStaticLibd.lib .
使用静态库方法是:
1.在应用程序的源程序目录下新建一个include文件夹,把.h头文件和.lib静态链接库文件都拷贝过去。
2.在项目管理目录树右键,选择“add library”,选择库类型“external library”(即外部库),连接类型必须选择"static",因为是静态库。
勾选add "d"suffix for debug version.使在debug模式下,应用程序自动调用debug版本的库文件。
共享库
1,共享库会多一个特殊的头文件 xxx_global.h。用来代替qt的宏 Q_DECL_EXPORT 和Q_DECL_IMPORT.
2.在定义的导出类名称前面多了在xxx_global.h定义过的宏,用于表明该类为导出类。
3,编译后会生成.dll文件和.lib文件。同样,不管是debug还是release版本,编译生成都是相同的文件名。
使用共享库
隐式链接
1.在应用程序的源程序目录下新建一个include文件夹,把2个.h头文件(即包括_global.h文件)和 .lib或者是(.a)静态链接库文件都拷贝过去。
2.在项目管理目录树右键,选择“add library”,选择库类型“external library”(即外部库),连接类型必须选择"dynamic",因为是动态库。
3.在library file选中include目录下的.lib 或者.a文件作为库文件。
4.必须将动态链接库文件.dll拷贝到可执行文件的的目录下,即pro 配置中的DESTDIR
显示链接
1. 显示链接通过QLibrary实现,一个QLibrary对象只能对一个共享库进行操作。一般在QLibrary构造函数中传递一个文件名,表示共享库文件。可以不用带后缀,因为可以通过平台自动识别。
如 QLibrary myLib("DelphiDLL");
QLibrary 的load函数用于首动载入dll到内存,一般不需要手动调用,因为在dll的函数第一次被调用时QLibrary会自动调用此函数。isLoaded 判断dll 是否已经被载入内存,unload用于将dll从内存卸载。如果不调用卸载,那么只会在程序退出时才卸载。
一个动态链接库在内存只有一个实例,基石有多处调用了这个动态链接库里的函数,它也只是会被载入一次。
2 .声明函数原型类型
如 typedef int (*FunDef)(int); //函数原定定义
3. 使用QLibrary 的resolve函数解析需要调用的函数。
如 FunDef myTriple = (FunDef) myLib.resolve("triple"); //解析DLL中的函数 triple为在dll的函数名
4.调用函数
如 int V=myTriple(ui->spinInput->value()); //调用函数
QT 静态链接库和动态链接库相关推荐
- 静态链接库与动态链接库 (二)动态链接库的编译与使用
上一篇文章里大概描述linux下静态链接库的编译与使用,下面讲动态链接库的编译与使用方法. 1. 什么是动态链接库 所谓动态链接库,是指编译的时候不会把程序引用到的库插入到执行程序里,而是在执行时候才 ...
- Linux下的静态链接库和动态链接库编程
Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...
- Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)
from: Makefile常用万能模板(包括静态链接库.动态链接库.可执行文件) 本文把makefile 分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接 ...
- 静态链接库和动态链接库(转)
我们可以创建一种文件里面包含了很多函数和变量的目标代码,链接的时候只要把这个文件指示给链接程序就自动地从文件中查找符合要求的函数和变量进行链接,整个查找过程根本不需要我们操心. 这个文件叫做 &quo ...
- 静态链接库、动态链接库和动态加载库
前言 静态库是obj文件的一个集合(目标文件中通常仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将其他已经编写好的目标文件引用进来,将没有解析的函数和变量进行解析,通常引用的目标 ...
- c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)
我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢? 其实,两个是完全不一样的东西.静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库.实际上静态库本身就包 ...
- cnsl是什么意思_VS2010下创建静态链接库和动态链接库
VS2010下创建静态链接库和动态链接库 类封装成dll如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类 ...
- linux下静态链接库和动态链接库
关于链接库的知识,网上太多资料了,但是并不代表我很熟悉.今天遇到了 一个问题,就是由于静态链接库和ubuntu系统不兼容导致的,虽然花了点时间才搞定 但是,其中暴露的问题也不少. 没有区分好静态链接库 ...
- UNIX环境高级编程(三)—— 静态链接库与动态链接库
动态链接库一般不开放源码,需要建工程才能使用(其中提供的接口和 API): 0. .a/.o/.so What are .a and .so files? .o 就相当于 windows 里的 obj ...
- 生成静态链接库和动态链接库
生成静态链接库和动态链接库 1.静态链接库 首先要生成.o文件 g++ -c test.cpp 然后就生成.a文件就行了 ar -r libtest.a test.o 如此一来我们就生成了静态链接库l ...
最新文章
- linux printk 时间戳,linux – kern.log中“00:00:00”时间戳的含义是什么?
- 无线电能接收初步测试
- WEB前后端分离开发中的验证与安全问题
- IT公司100题-4-在二元树中找出和为某一值的所有路径
- 【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)
- CV2 puttext不能显示中文问题
- 如何实现用DataGridView来做统计表格
- Tinderbox for Mac(可视化个人笔记工具)
- 至今为止碰到的非常妖怪的计算机问题
- 咸鱼CAD笔记—CAD基础操作
- 推荐用于BMS锂电池管理系统的低功耗蓝牙芯片MS1656
- 3DTools TrackballDecorator实现3D漫游
- Observability——Wavefront
- oeasy教您玩转linux 010211 牛说 cowsay
- 30用一个例子解释mapping到底是什么
- python与会计学_Python 中用于表示逻辑与的关键字分别是 ____
- 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十三)
- Java中用包装模式实现标准的DataSource数据源连接池
- 2023开户选哪个证券公司比较好?哪个券商服务最好?
- android屏幕共享mac,Mirror for Android TV
热门文章
- 真正优秀的领导者,无非是做好这2件事
- 六款优秀的 Linux 基准测试工具
- Num43 oracle(子查询: 集合查询:处理数据:创建和管理表: 其他数据库对象)...
- 做一个管理者的学习之路--002
- Python使用matplotlib可视化模拟商场促销价格关系折线图
- 用 Python 的 selenium扩展 驱动 火狐 谷歌 浏览器
- Jquery 对象求和
- OFFICE使用技术:让几个自选图形间距相等
- 全网首发:祝贺编译成功loongarch64 jna-5.10.0及难点说明
- 程序包androidx.support.annotation不存在/import androidx.v7.app.AppCompatActivity;报错