在Qt Creator中使用静态库

Dan*_*n O 35 c++ linker static-libraries qt-creator

我有一段时间寻找文档,清楚地解释了如何在Qt Creator中使用静态库.

我使用Qt Creator创建并编译了我的静态库(New => Projects\C++ Library => Set type to"Statically Linked Library").它编译并吐出一个".a文件".

我遇到的问题是当我尝试使用该库时.我有另一个想要使用它的项目(库中的#include文件等),但我不知道链接库或包含库中文件的正确方法.

Dew*_*wfy 36

LIBS += -L[path to lib] -l[name of lib]
Run Code Online (Sandbox Code Playgroud)

注意!lib:lib [nameOfLib] .a的文件名,你必须只传递原始部分-l [nameOfLib]

  • 这对我来说不起作用,但这里有另一个答案,即在编辑.pro文件和使用"添加库"UI时右键单击. (5认同)

rpg*_*rpg 17

在使用库的项目中,LIBS变量指向lib的路径.
要包含库中的文件,请将库文件夹添加到INCLUDEPATH,然后在代码文件中执行常规#include.

例如:

# the binary's .pro  
LIBS += c:/mylibs/math.lib
INCLUDEPATH += c:/mylibs
Run Code Online (Sandbox Code Playgroud)

编辑:
-L告诉qmake路径是一个可以搜索库的目录-l告诉它路径是一个文件,但请注意下面的观察.

来自qmake文档:

此变量包含要链接到项目中的库列表.您可以使用Unix -l(库)和-L(库路径)标志,qmake将在Windows上使用这些库执行正确的操作(即这意味着将库的完整路径传递给链接器).唯一的限制是库必须存在,以便qmake找到-l lib所在的目录.

注意:在Windows上,使用-l选项指定库(如上例所示)将导致使用具有最高版本号的库; 例如,可能会使用libmath2.lib而不是libmathlib.为避免这种歧义, 我们建议您通过包含.lib文件名后缀来显式指定要使用的库.


小智 15

..来自QT项目创建者

  1. 从左侧菜单转到projectName.pro
  2. 输入LIBS + =
  3. rightClick AddLibrary

  • 输入`LIBS + =`是没有必要的.您可以将其缩短为2个步骤. (10认同)

Tem*_*mak 10

变种

 LIBS += -L[PATH_TO_LIB_DIR] -l[LIBNAME] 
Run Code Online (Sandbox Code Playgroud)

如果在同一文件夹中同时具有静态libLIBNAME.a和动态libLIBNAME.so库,则不起作用 PATH_TO_LIB_DIR.
在我的Linux上使用QMake v 3.0 的情况下,默认情况下链接动态链接.
强制与静态链接,您需要明确指定它而不使用任何选项.

LIBS += PATH_TO_LIB_DIR/libLIBNAME.a
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一有人解释如何在同一目录中找到 .so 时强制链接器使用 .a (2认同)