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
  • 动态库(dynamic library):使用静态库编译得到的可执行文件一般比较大,为此开发出了动态链接技术。

    • Linux下动态库后缀为:.so ,意为shared object
    • windows下(mingw)动态库后缀为.dll,意为dynamic linking libraryMSVC环境编译得到动态库后缀亦为.dll

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

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐