关于QT的生成静态库和共享库的创建与使用

  • 1、前言为什么要用静态库或者共享库
  • 2、在qt中怎么生成和引用
  • 3、在vs引用动态库


1、前言为什么要用静态库或者共享库

在程序量比较小的时候,把cpp和.h都放到项目中是可以的,但是你想复用你之前的程序或者减少项目中的cpp和.h,这时候就需要把cpp封装成库

2、在qt中怎么生成和引用

  1. 添加c++的库 ,如图
  2. 下一步选择静态库或者共享库(动态库)


    你可以添加你想要的的版本,这边举例是msvc 64位

Qt 调用非静态java方法 qt调用静态库_c++


3. 先举例 动态库 的创建与使用,进入qtcreator界面

需要先把**QAdd.h 和Qadd-global.h **做一些替换,如下

Qt 调用非静态java方法 qt调用静态库_dll_02


.h文件

Qt 调用非静态java方法 qt调用静态库_qt_03


.cpp下

Qt 调用非静态java方法 qt调用静态库_动态库_04


4. 对global的解释

Qt 调用非静态java方法 qt调用静态库_Qt 调用非静态java方法_05


Qt 调用非静态java方法 qt调用静态库_Qt 调用非静态java方法_06


我的理解是,一个是编译出来时调用,一个是引用时调用

5. 编译msvc64位debug和release版,在test中添加外部的库(lib)。把debug和release运行得到的Qadd.lib 添加到test根目录的include文件下,debug更名为QAddd.lib。

Qt 调用非静态java方法 qt调用静态库_c++_07


添加lib

Qt 调用非静态java方法 qt调用静态库_动态库_08


6. 最重要的一步 一定要把dll放在你的exe同级目录,不然程序会崩溃

Qt 调用非静态java方法 qt调用静态库_dll_09


运行结果如下图所示

Qt 调用非静态java方法 qt调用静态库_c++_10

3、在vs引用动态库

  1. 把qt creator debug/release生成的 lib和QAdd.h 放入 vs 程序目录include里面
  2. 对vs 进行设置,需要设置三个地方
    第一步c++ —》常规-----》附加包含目录-----》直接输入include
    第二步 链接器 ----》常规------》附加库目录------》直接输入include
    第三步 链接器 ----》输入-------》附加依赖项----》输入刚刚的lib



    3、运行结果,我是在release下执行的,依然要把dll放在和exe一起

4、静态库不会生成dll,所以不用把dll和exe放在一起,少一步,其余步骤一抹一样
5、博客推荐
关于静态动态库区别,推荐博客,
关于路径:.\ 为当前路径为vcxproj文件所在目录,…\上一级。

这些列子实际测试了的,亲试踩坑,踩了几个小时,睬出来了。

参考博客和书籍:
1、qt5.9 c++开发指南