有几个问题似乎是相似的,但没有什么能真正帮助我。我想在一个项目中创建一个静态库并在同一个项目中使用它,但会发生链接错误。窗口-Qt创建并使用自制的静态库
一个很好的例子,很好地满足了我的条件是附加到Qt票务QTBUG-45706 https://bugreports.qt.io/browse/QTBUG-45706。在一个简单的解释中,我们有一个应该使用一些自制库的应用程序。只需修改几件事情即可查看我的问题。
应用程序 - > main.cpp中
#include <QCoreApplication>
#include <lib.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Lib l1;
return a.exec();
}
lib.pro
CONFIG += staticlib
如果你现在编译项目,你会看到下面的错误
main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Lib2::Lib2(void)" ([email protected]@[email protected]) referenced in function main
使用Qt创建者4.0.3基于Qt 5.6.1,qmake with mscv2013
需要什么才能使其发挥作用?
澄清:
这个项目的结构如下:
subdirs_test.pro (subdir project)
\- app (app project, includes lib and lib2)
\-- app.pro
\-- main.cpp
\- lib (static library)
\-- lib.pro
\-- lib.h
\-- lib_global.h
\-- lib.cpp
\- lib2 (static library)
\-- lib2.pro
\-- lib2.h
\-- lib2_global.h
\-- lib2.cpp
的 '应用' 项目应当使用lib和LIB2的类,它是静态库。
正如所建议的那样,使用“添加库...”不会改变一件事情。在我的情况下,这个代码将被生成。
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../lib/release/ -llib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../lib/debug/ -llib
else:unix: LIBS += -L$$OUT_PWD/../lib/ -llib
INCLUDEPATH += $$PWD/../lib
DEPENDPATH += $$PWD/../lib
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/liblib.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/liblib.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/lib.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/lib.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../lib/liblib.a
目前还不清楚是什么你正在尝试做的。您必须设置至少2个.pro文件。一个用于lib和一个用于应用程序。在应用程序中,将库输出路径添加到“INCLUDES”和“LIBS”变量中。 通常你也有第三个subdir项目,把所有的东西绑在一起 – IlBeldus
[不要使用Q_DECL_IMPORT宏和静态库](https://forum.qt.io/topic/25328/static-library/8),宏是仅用于共享Windows库。这是来自我的一位同事的重要说明。宏通常隐藏在其他全局头文件中。 – sandkasten