代码改变世界

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

2023-06-16 16:34  @学无止境  阅读(1080)  评论(0编辑  收藏  举报

参考 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