首页 > 其他分享 >qt创建调用动态库、静态库

qt创建调用动态库、静态库

时间:2023-06-16 16:46:11浏览次数:38  
标签:调用 qt Lib 静态 xxx release PWD debug CONFIG

参考 https://www.cnblogs.com/skynet/p/3372855.html

---------------------------------------------windows下-------------------------------------------------------------

1、创建动态库、静态库

方法参考:https://blog.csdn.net/m0_67254672/article/details/123072198

动态、静态创建时区别为库的类型不同,动态Type: Shared Library,静态为Statically Linked Library

2、编译库文件 

 a) 动态库

  用MSVC编译生成 xxx.lib 和 xxx.dll

  MinGW编译生成 libxxx.a 和xxx.dll

 b) 静态库

  用MSVC编译生成 xxx.lib

  用MinGW编译生成 libxxx.a

静态库对应的lib文件叫静态库,动态库对应的lib文件叫【导入库】

 

如果想要生成的库名称后加d,两种方法(在pro文件中添加)
1、TARGET = $$qtLibraryTarget($$TARGET)
2、
  CONFIG(debug, debug|release){
      TARGET = yourDlld
  }
  else{
      TARGET = yourDll
  }

库文件输出目录修改(可选),在pro文件中添加

win32:{
      !contains(QT_ARCH, i386):{
          CONFIG(release, debug|release):{
              DESTDIR = $$PWD/lib/win64/release
          }
          else:CONFIG(debug, debug|release):{
              DESTDIR = $$PWD/lib/win64/debug
          }
      }
      else:{
          CONFIG(release, debug|release):{
              DESTDIR = $$PWD/lib/win86/release
          }
          else:CONFIG(debug, debug|release):{
              DESTDIR = $$PWD/lib/win86/debug
          }
      }
    }

    unix:!macx{ #Linux下
        !contains(QT_ARCH, i386):{#x64
            CONFIG(release, debug|release):{
                DESTDIR = $$PWD/lib/win64/release
            }
            else:CONFIG(debug, debug|release):{
                DESTDIR = $$PWD/lib/win64/debug
            }
        }
        else:{
            CONFIG(release, debug|release):{
                DESTDIR = $$PWD/lib/win86/release
            }
            else:CONFIG(debug, debug|release):{
                DESTDIR = $$PWD/lib/win86/debug
            }
        }
    }

3、调用

  a) 调用动态库   

   1、在项目中添加相应的头文件
   2、在pro中添加库文件xxx.lib或xxx.a       

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/Lib/ -lHelloDll
   else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/Lib/ -lHelloDlld(根据情况要不要加d) 
   else:unix:!macx: LIBS += -L$$PWD/Lib/ -lHelloDlld

   INCLUDEPATH += $$PWD/Lib
   DEPENDPATH += $$PWD/Lib 

      3、将xxx.dll文件复制到项目可执行文件目录下

  b) 调用静态库  

    1、在项目中添加相应的头文件

    2、在pro中添加库文件xxx.lib或xxx.a        

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/Lib/ -lHelloStatic
   else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/Lib/ -lHelloStaticd
   else:unix:!macx: LIBS += -L$$PWD/Lib/ -lHelloStatic
   
   INCLUDEPATH += $$PWD/Lib
   DEPENDPATH += $$PWD/Lib
   
   #Qt 使用 PRE_TARGETDEPS 变量来存储静态链接库的依赖关系。每次构建应用程序时,它都会强制您的库重新链接。
   #如果您没有指定此变量并且您更新和重建您的库,您的程序仍将使用旧库。
   #如果您使用静态库,您应该(几乎)始终同时使用 LIB 和 PRE_TARGETDEPS.
   win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/Lib/libHelloStatic.a
   else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/Lib/libHelloStaticd.a
   else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/Lib/HelloStatic.lib
   else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/Lib/HelloStaticd.lib
   else:unix:!macx: PRE_TARGETDEPS += $$PWD/Lib/libHelloStatic.a

 

 

---------------------------------------------linux下------------------------------------------------------------

1、创建动态库、静态库

方法与在windows 下相同

2、编译库文件 

方法与在windows 下相同

动态库输出文件为xxx.so,xxx.so.1.0.0等

静态库输出文件为xxx.a 

3、调用 

a) 调用动态库 

  1、在项目中添加相应的头文件

  2、在pro中添加库文件xxx.so      

unix:!macx: LIBS += -L$$PWD/Lib/ -lHelloDll

INCLUDEPATH += $$PWD/Lib
DEPENDPATH += $$PWD/Lib

    需要将 xxx.so.1.0.0复制到项目Lib目录下,并创建软连接xxx.so,xxx.so.1-->xxx.so.1.0.0

  3、将 xxx.so.1.0.0复制到项目Lib目录下,并创建软连接xxx.so,xxx.so.1-->xxx.so.1.0.0(如果动态库与可执行文件在同一目录,可省此步)

b)调用静态库

  1、在项目中添加相应的头文件

  2、在pro中添加库文件xxx.a    

unix:!macx: LIBS += -L$$PWD/Lib/ -lHelloStatic

INCLUDEPATH += $$PWD/Lib
DEPENDPATH += $$PWD/Lib

unix:!macx: PRE_TARGETDEPS += $$PWD/Lib/libHelloStatic.a

 

标签:调用,qt,Lib,静态,xxx,release,PWD,debug,CONFIG
From: https://www.cnblogs.com/fengzhengfly/p/17485930.html

相关文章

  • 京东api接口获得jd商品分类源代码调用示例
    ​  京东商品分类接口的作用是提供一种获取商品分类信息的方式,可以帮助开发者在自己的应用程序中快速获取商品分类数据,从而实现更加精准的商品分类展示、搜索等功能。具体而言,京东商品分类接口(获取免费测试)的作用包括:1.精准地获取商品分类信息:通过商品分类接口,开发者可以获......
  • 京东api接口获得jd商品分类源代码调用示例
     京东商品分类接口的作用是提供一种获取商品分类信息的方式,可以帮助开发者在自己的应用程序中快速获取商品分类数据,从而实现更加精准的商品分类展示、搜索等功能。具体而言,京东商品分类接口(获取免费测试请私信)的作用包括:1.精准地获取商品分类信息:通过商品分类接口,开发者可以获取最......
  • Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
    前言  前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts......
  • Qt编写视频监控系统79-四种界面导航栏的设计
    一、前言最初视频监控系统按照二级菜单的设计思路,顶部标题栏一级菜单,左侧对应二级菜单,最初采用图片在上面,文字在下面的按钮方式展示,随着功能的增加,二级菜单越来越多,如果都是这个图文上下排列的按钮,那左侧高度空间不够,比如在笔记本1366x768的分辨率上,左侧如果有七八个菜单按钮,那就......
  • MQTT Broker 比较与选型——开源与商业服务器/服务对比
    MQTTBroker比较与选型——开源与商业服务器/服务对比  编程  2020-03-20  2020-03-21  评论数: 2开源MQTTBroker对比截止2021年,物联网行业里可选的MQTTBroker有很多,除了经典的Mosquitto和AWS、Azure,百度云、阿里云、IBM等几个提供物联网MQTT接入服务的产品外......
  • qt6 在线安装
    Qt6在线安装下载安装工具:https://download.qt.io/official_releases/online_installers/安装,使用国内源提升下载速度。./qt-unified-windows-x64-4.6.0-online.exe--mirrorhttps://mirror.nju.edu.cn/qt......
  • VC和GCC静态变量析构顺序不同
    VC和GCC静态变量析构顺序不同(金庆的专栏)静态变量析构顺序正常情况下是构造的反序。但是VC对DLL中的静态变量好像是需等待DLL卸载时再析构,表现为主程序中的静态变量先析构,DLL中的静态变量后析构。VC测试版本为VC2010Express.例如:classA{};sta......
  • 如何调试lvds屏-基于TQT507开发板
    1.1.更换不同的屏  TQT507可以通过修改指定启动配置文件(Embedsky.ini)方便地支持不同分辨率的屏。用户可以显示参数写入配置文件中,并放到sd卡内。插入sd卡启动板卡,板卡会读取配置文件内容,并进行相应的设置。1.2.显示屏接线说明 TQT507Android支持LVDS和HDMI输出。LVDS和HDMI同......
  • cloudstack的重新封装--api调用
    使用python将cloudstack的多个功能进行重新封装形成api调用。#coding=utf-8#!/usr/bin/envpythonimportbase64importhmacimportjsonimportrequestsimportsysimporttimeimporturllibimportreimporthashlibimportloggingLOG=logging.getLogger(__name__......
  • 使用lupdate命令清空qt工程里面的.ts文件多余的无效翻译,终端提示没有找到lupdate命令
    使用lupdate命令清空qt工程里面的.ts文件多余的无效翻译,终端提示没有找到lupdate命令实验平台:Ubuntu16.04解决过程:1.在终端中使用lupdatexxx.pro-no-obsolete命令2.终端提示在/usr/lib/x86_64-linux-gnu/qt4/bin没有找到lupdate命令3.该提示表明没有安装相......