用法:LIBS += -Lzzz -lxxx -lyyy
zzz:库路径
xxx、yyy:库文件
库路径可以有以下的形式:
-L. 表示 .pro所在目录
-L$$PRO_FILE_PWD/ 表示 .pro所在目录
-L$$PWD/ 表示 .pro所在目录
-LC:/abc/ 表示C:/abc/
库文件可以有以下的形式:
若.pro所在目录lib下有解码库需要被链接,msvc版本为“VideoDecoder.lib”,mingw版本为“libVideoDecoder.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
编译就通过了。
附《msvc、mingw分别编译动态库与静态库文件名区别》:
msvc动态库:test.dll,test.lib
msvc静态库:test.lib
mingw动态库:test.dll、libtest.a
mingw静态库:libtest.a