有幾個問題似乎是相似的,但沒有什麼能真正幫助我。我想在一個項目中創建一個靜態庫並在同一個項目中使用它,但會發生鏈接錯誤。窗口-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