Qt5链接动态库与静态库
本教程以链接前面介绍的GSL科学计算库的静态库和动态库为例进行讲解,后续会介绍在QT中创建自己的静态库和动态库,使用库的好处是可以提供代码复用性,我们只需要导入相应的库和头文件便可调用相关函数API,可以加速开发进程
1. 什么是静态库和动态库?
-
静态库(static library):一组目标文件(
.o/.obj文件)的集合,在Linux下或者是mingw环境下通过程序ar生成,意为archive,打包的意思。- Linux下静态库后缀为:
.a,例如/usr/local/lib/libgsl.a - Windows下(mingw环境)静态库名称和Linux一致,如果是MSVC环境编译得到的静态库,后缀为
.lib
- Linux下静态库后缀为:
-
动态库(dynamic library):使用静态库编译得到的可执行文件一般比较大,为此开发出了动态链接技术。
- Linux下动态库后缀为:
.so,意为shared object - windows下(mingw)动态库后缀为
.dll,意为dynamic linking library,MSVC环境编译得到动态库后缀亦为.dll
- Linux下动态库后缀为:
2. Qt编译链接动态库
以GSL库为例,要链接动态库其gsl.pri文件(关于该文件的配置请查看前面一份教程《Qt导入第三方库》)内容如下:
# 宏定义项,指明采用GSL
DEFINES += GSL_DLL
# 指明GSL库所对应的头文件所在目录
INCLUDEPATH += $$PWD/include
# 指明依赖库关系,$$PWD表示文件当前路径
LIBS += -L$$PWD/lib -lgsl
LIBS += -L$$PWD/lib -lgslcblas
使用Qt Creator新建一个窗口程序,在MainWindow.ui放置按钮和QLineEdit控件,目标行为:点击按钮,QLineEdit控件显示贝塞尔曲线J0的值。
可以下载使用cmder,利用该环境自带的ldd命令查看可执行文件的依赖库,如果相应的动态库不在系统环境变量中,会提示报错。
3. Qt编译链接静态库
修改gsl.pri文件内容如下:
# 宏定义项,指明采用GSL
DEFINES += GSL_DLL
# 指明GSL库所对应的头文件所在目录
INCLUDEPATH += $$PWD/include
CONFIG += static # 指定静态编译
LIBS += D:/temp/gsl/lib/libgsl.a
LIBS += D:/temp/gsl/lib/libgslcblas.a
在cmder下使用ldd检测依赖项。
如果小伙伴们对文章内容有不理解的地方可以查看相对应的视频教程:https://www.bilibili.com/video/av63186491
本文详细介绍了在Qt5中如何链接GSL科学计算库的静态库和动态库,包括配置gsl.pri文件,以及在QtCreator中创建窗口程序的具体步骤。同时,通过实例演示了如何使用库来提高代码复用性和开发效率。
2699

被折叠的 条评论
为什么被折叠?



