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