分享

【精选】【QT加载静态链接库(.Lib,.a,.os),以及关于LIBS +=的用法】_libs += -l_Harden

 wuxinit_ 2023-10-27 发布于湖北

以下内容由本人收集资料重新编辑的内容

.pro 文件中写入

需要在项目的 .pro 文件中写入加载lib,并且要添加相应的 .h文件进入项目,并引用

核心是 LIBS+=

书写格式:LIBS+= -L直接打地址(库路径) -l库文件(去除后缀)

代码如下(示例):

// 需要在项目的 .pro 文件中写入 加载lib,有多种写法
 LIBS += -L. -limm32 -luser32
 LIBS += -L$$PWD/./ -limm32 -luser32    
在前面加上 Release: 或 Debug: 的区别

分别让程序在不同的情况下调用不同的DLL
代码如下(示例):

Release:LIBS+=-L  folderPath // release 版引入的lib文件路径
Debug:   LIBS+= -L folderPath // Debug 版引入的lib文件路径
LIBS+= 与 LIBPATH +=

看到网上有人说另外一种用法

LIBS+= 指明lib文件的名称,
LIBPATH += 指明lib文件的路径。最后还要把DLL文件复制到exe所在路径(或者system32)


库路径

-L. - - -表示 .pro所在目录

-L$$PRO_FILE_PWD/ - - -表示 .pro所在目录

-L$$PWD/ - - - 表示 .pro所在目录

-LC:/abc/ - - -表示C:/abc/

QT内的特殊表示

PWD
指的是当前正在解析的.pro文件的目录的完整路径。 在编写支持影子构建的项目文件时,PWD很有用。
代码如下(示例):

LIBS += -L$$PWD/.......

OUT_PWD
指的是qmake生成的Makefile的目录的完整路径。即构建目录,例如build-??-Desktop_Qt_5_12_8_MSVC2017_64bit-Debug

LIBS += -L$$OUT_PWD/.......

PRO_FILE
正在使用的项目文件的路径。

LIBS += -L$$_PRO_FILE_/......

PRO_FILE_PWD
包含目录的路径,该目录包含正在使用的项目文件。

LIBS += -L$$_PRO_FILE_PWD_/....
不同操作系统下的静态库

linux:LIBS += your_lib_path/your_lib动态库
linux:LIBS += -L your_lib_path -lyour_lib//经过测试了
win32:LIBS += your_lib_path/your_lib
例如:
LIBS += -L lib/pcsc/ -lpcsclite
LIBS += lib/pcsc/libpcsclite.a


库文件

需要另外加库的程序最好单独建一个文件夹放置

1. 不加-l时,需要写库文件全名(不推荐)
代码如下(示例):

LIBS += -L$$PWD/lib VideoDecoder.lib

LIBS += -L$$PWD/lib libVideoDecoder.a

2. 加 -l 时,可以将不同编译器库文件名差异屏蔽掉

假设链接msvc库,则只需要去掉文件后缀(一般是.lib):
LIBS += -L$$PWD/lib -lVideoDecoder
假设链接mingw/gcc库,则需要去掉文件前缀"lib",和后缀(一般是.a):
LIBS += -L$$PWD/lib -lVideoDecoder

这样不管在哪个编译器下,都能保证命令一致。

注意:
请牢记msvc库只去后缀
mingw库去前缀和后缀。
因为我遇到一个问题,使用msvc编译工程,工程中调用了boost线程库,boost使用msvc编译为静态库,这个静态线程库的名字比较坑“libboost_thread-vc141-mt-gd-x64-1_71.lib”,按照我们一贯的想法,肯定是去掉前lib,去掉后缀.lib,像这样:
LIBS += -LC:/Boost_msvc_static/lib/ -lboost_thread-vc141-mt-gd-x64-1_71
死活编译不过,找不到库文件。此时,你只要想起来链接msvc库只去后缀,像这样:
LIBS += -LC:/Boost_msvc_static/lib/ -llibboost_thread-vc141-mt-gd-x64-1_71
编译就通过了。

如果需要添加的库文件较多,可以这么写:


MYLIBS=-lLBA -lLBB -lLBC

LIBS+=$$MYLIBS

附《msvc、mingw分别编译动态库与静态库文件名区别》:

msvc动态库:test.dll,test.lib

msvc静态库:test.lib

mingw动态库:test.dll、libtest.a

mingw静态库:libtest.a

添加.h文件进入项目

这点应该没什么说的
添加所对应的 .h 文件进入项目,并且在想调用的类里面进行 #include (检查是否“ ”与< >错用了)

添加头文件(或者直接通过右键添加现有文件就好了)

INCLUDEPATH += your_include_path例如:
INCLUDEPATH += . /usr/local/include(点号后面有空格)

本文为各个博主的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
引用的原文链接:https://blog.csdn.net/zyhse/article/details/105408639,https://zhidao.baidu.com/question/489955709.html,
https://www.cnblogs.com/cppskill/p/6207801.html,
https://blog.csdn.net/u010824101/article/details/83154816?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link,
https://blog.csdn.net/libaineu2004/article/details/89366925

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多