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]
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项目创建者
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)