5-Qt5链接动态库与静态库

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值