2016-03-02 150 views
1

嗨我想編譯一個我爲靜態的Windows編譯爲可執行文件的openssl庫的QT程序。我以爲我成功了,但是如果沒有Openssl dll,我就無法運行。我在網上搜尋,試圖找到一個解決方案,但不能。下面是我做了什麼:QT https SSL支持靜態QT靜態程序構建 - 仍然需要openssl dll

我過了這個通過編輯Windows PowerShell腳本用於靜態構建Qt來configure.bat,然後運行它來構建:

-openssl-linked 
-I C:\OpenSSL-Win32\include 
-L C:\OpenSSL-Win32\lib\MinGW 
OPENSSL_LIBS=""-lUser32 -lAdvapi32 -lGdi32 -lCrypt32"" 
OPENSSL_LIBS_DEBUG=-""-lssleay32 -llibeay32"" 
OPENSSL_LIBS_RELEASE=""-lssleay32 -llibeay32"" 

的可執行文件將沒有工作openssl dlls現在。難道我做錯了什麼?

+0

執行此qt靜態構建時需要考慮的一些問題 - 使用-LC:\ OpenSSL-Win32 \ lib沒有MinGW目錄時,編輯qt靜態構建的powershell腳本時,必須執行兩項操作 - 如上圖所示爲參數使用雙引號,以便成功傳遞給configure.bat,同時我也無法在PowerShell腳本中插入換行符,所以我最終要到達一個正在出現的行的末尾,按住shift鍵然後按右箭頭鍵選擇換行符,然後通過我已經創建的換行符粘貼它 - 這是必要的使腳本工作 –

+0

此外,如果您必須靜態重建QT,只需刪除靜態目錄從頭開始,一旦mingw靜態qt構建完成後,您需要將openssl dll放在與exe相同的目錄中。這是以前的線程的延續http://stackoverflow.com/questions/35442599/qt-https-ssl-support-for-static-qt-static-program-build-getting-protocol-htt –

回答

0

您正在與動態版本的OpenSSL進行鏈接。你應該用靜態的,而不是鏈接:從耀眼的光芒製作

-L C:\OpenSSL-Win32\lib\MinGW\static 
+0

謝謝 - 唯一的mingw lib目錄中的文件是libeay32.a libeay32.def ssleay32.a和ssleay32.def。也沒有靜態目錄。 –

+0

@JoshOrenberg'.a'看起來像一個靜態存檔(一個'.o'文件的集合),但是在mingw中這不是一個給定的。也許你應該檢查這些是導入庫還是真正的靜態庫。如果它們不是靜態的,那麼你運氣不好,需要自己靜態構建openssl,或者找到它的另一個來源。 –

0

答:

的Dependency Walker將告訴你哪些DLL的可執行文件依賴。 MinGW庫是使用VC++ DLL作爲源代碼的「內置」。 IIRC,沒有靜態的MinGW構建(爲什麼生成的.a文件是 如此巨大一直是我的一個謎)。