Qt應用程序默認沒有加QtNetwork庫。如下圖:
在開發過程中,因處理業務需要手動添加QtNetwork庫。根據常見情況分為以下兩種:
【1】若使用QTCreator開發程序
在工程的pro文件中添加:QT += network
【2】若使用VS + QT開發程序
本地環境VS2017 + QT5.9.2 編譯錯誤提示如下:
1 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl QNetworkRequest::QNetworkRequest(class QUrl const &)" (__imp_??0QNetworkRequest@@QEAA@AEBVQUrl@@@Z),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 2 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl QNetworkRequest::~QNetworkRequest(void)" (__imp_??1QNetworkRequest@@QEAA@XZ),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 3 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QNetworkRequest::setUrl(class QUrl const &)" (__imp_?setUrl@QNetworkRequest@@QEAAXAEBVQUrl@@@Z),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 4 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QNetworkRequest::setHeader(enum QNetworkRequest::KnownHeaders,class QVariant const &)" (__imp_?setHeader@QNetworkRequest@@QEAAXW4KnownHeaders@1@AEBVQVariant@@@Z),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 5 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QNetworkRequest::setSslConfiguration(class QSslConfiguration const &)" (__imp_?setSslConfiguration@QNetworkRequest@@QEAAXAEBVQSslConfiguration@@@Z),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 6 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl QSslConfiguration::QSslConfiguration(void)" (__imp_??0QSslConfiguration@@QEAA@XZ),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 7 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl QSslConfiguration::~QSslConfiguration(void)" (__imp_??1QSslConfiguration@@QEAA@XZ),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 8 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: class QSslConfiguration & __cdecl QSslConfiguration::operator=(class QSslConfiguration &&)" (__imp_??4QSslConfiguration@@QEAAAEAV0@$$QEAV0@@Z),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 9 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QSslConfiguration::setProtocol(enum QSsl::SslProtocol)" (__imp_?setProtocol@QSslConfiguration@@QEAAXW4SslProtocol@QSsl@@@Z),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 10 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QSslConfiguration::setPeerVerifyMode(enum QSslSocket::PeerVerifyMode)" (__imp_?setPeerVerifyMode@QSslConfiguration@@QEAAXW4PeerVerifyMode@QSslSocket@@@Z),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 11 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: static class QSslConfiguration __cdecl QSslConfiguration::defaultConfiguration(void)" (__imp_?defaultConfiguration@QSslConfiguration@@SA?AV1@XZ),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 12 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: __cdecl QNetworkAccessManager::QNetworkAccessManager(class QObject *)" (__imp_??0QNetworkAccessManager@@QEAA@PEAVQObject@@@Z),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 13 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: virtual __cdecl QNetworkAccessManager::~QNetworkAccessManager(void)" (__imp_??1QNetworkAccessManager@@UEAA@XZ),該符號在函數 "public: virtual __cdecl UPCLoginService::~UPCLoginService(void)" (??1UPCLoginService@@UEAA@XZ) 中被引用 14 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: class QNetworkReply * __cdecl QNetworkAccessManager::post(class QNetworkRequest const &,class QByteArray const &)" (__imp_?post@QNetworkAccessManager@@QEAAPEAVQNetworkReply@@AEBVQNetworkRequest@@AEBVQByteArray@@@Z),該符號在函數 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 15 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: void __cdecl QNetworkAccessManager::finished(class QNetworkReply *)" (__imp_?finished@QNetworkAccessManager@@QEAAXPEAVQNetworkReply@@@Z),該符號在函數 "public: __cdecl UPCLoginService::UPCLoginService(class QObject *)" (??0UPCLoginService@@QEAA@PEAVQObject@@@Z) 中被引用 16 error LNK2001: 無法解析的外部符號 "protected: virtual class QNetworkReply * __cdecl QNetworkAccessManager::createRequest(enum QNetworkAccessManager::Operation,class QNetworkRequest const &,class QIODevice *)" (?createRequest@QNetworkAccessManager@@MEAAPEAVQNetworkReply@@W4Operation@1@AEBVQNetworkRequest@@PEAVQIODevice@@@Z) 17 error LNK2001: 無法解析的外部符號 "__declspec(dllimport) public: static struct QMetaObject const QNetworkAccessManager::staticMetaObject" (__imp_?staticMetaObject@QNetworkAccessManager@@2UQMetaObject@@B) 18 error LNK2001: 無法解析的外部符號 "__declspec(dllimport) public: static struct QMetaObject const QNetworkAccessManager::staticMetaObject" (__imp_?staticMetaObject@QNetworkAccessManager@@2UQMetaObject@@B) 19 error LNK2001: 無法解析的外部符號 "__declspec(dllimport) public: static struct QMetaObject const QNetworkReply::staticMetaObject" (__imp_?staticMetaObject@QNetworkReply@@2UQMetaObject@@B) 20 error LNK2001: 無法解析的外部符號 "__declspec(dllimport) public: static struct QMetaObject const QNetworkReply::staticMetaObject" (__imp_?staticMetaObject@QNetworkReply@@2UQMetaObject@@B) 21 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: virtual void * __cdecl QNetworkAccessManager::qt_metacast(char const *)" (__imp_?qt_metacast@QNetworkAccessManager@@UEAAPEAXPEBD@Z),該符號在函數 "public: virtual void * __cdecl UPCLoginService::qt_metacast(char const *)" (?qt_metacast@UPCLoginService@@UEAAPEAXPEBD@Z) 中被引用 22 error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: virtual int __cdecl QNetworkAccessManager::qt_metacall(enum QMetaObject::Call,int,void * *)" (__imp_?qt_metacall@QNetworkAccessManager@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z),該符號在函數 "public: virtual int __cdecl UPCLoginService::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@UPCLoginService@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z) 中被引用
一般出現此鏈接問題都是沒有添加庫文件造成的。
很明顯,程序中使用了QtNetwork庫,那么就需要手動添加QtNetwork庫文件:
(1)在debug模式,需要加Q5tNetworkd.lib庫文件
(2)在release模式,需要加Qt5Network.lib庫文件
當使用VS進行開發時在哪里添加呢?共有兩個地方需要添加(缺一不可):
(1)項目->屬性->c/c++->常規->附加包含目錄->在彈出的對話框中,點那個文件夾形狀的按鈕添加新行,輸入$(QTDIR)\include\QtNetwork
具體如圖所示:
(2)項目->屬性->連接器->輸入->附加依賴項,添加 Qt5Networkd.lib(debug模式)或者 Qt5Network.lib(release模式)
具體如圖所示:
添加完成后,再編譯。若仍然報錯,請仔細復盤如上步驟。
備注:其他模塊庫的添加類比如上步驟。
Good Good Study, Day Day Up.
順序 選擇 循環 總結