2012-04-16 170 views
1

我用mingw在win32下成功編譯了OpenSSL 1.0.1。現在我想要編譯靜態的Qt 4.8.1具有以下配置:用openSSL錯誤編譯靜態Qt

configure -release -static -qt-zlib -nomake examples -nomake demos -no-qt3support -no-scripttools -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite -openssl-linked OPENSSL_LIBS="-lssl -lcrypto -lgdi32 -luser32" -I H:\Workplace\OpenSSL\include -L H:\Workplace\OpenSSL

我得到了這些錯誤:

H:\Workplace\OpenSSL/libssl.a(ssl_lib.o):ssl_lib.c:(.text+0x17be): undefined ref erence to '_time32'(多次)

H:\Workplace\OpenSSL/libcrypto.a(o_time.o):o_time.c:(.text+0x362): undefined ref erence to '_gmtime32'

H:\Workplace\OpenSSL/libcrypto.a(mem_dbg.o):mem_dbg.c:(.text+0x4c7): undefined r eference to '_localtime32'

已解決(參見bel ow)

回答

2

最後我解決了所有的問題,這裏是完整的解決方案來編譯靜態的Qt使用TDM-GCC靜態的OpenSSL

  • 下載最新的OpenSSL源代碼並解壓縮它們。

  • 我用TDM-GCC編譯,所以下載並安裝。

  • 安裝MSYS。

  • 與以下內容創建文件../MsysInstallDir/etc/fstab

MyPathToMinGW /mingw(必需如果使用TDM-GCC)

MyPathToPerl /perl(還需要perl的安裝)

  • 編譯OpenSSL在OpenSSL源文件夾(在MSYS中)運行以下命令:

./config

make

  • 下載QT-比比皆是(我用v.4.8.1)來源並解壓縮。

UPDATE:最近我構建4.8.2其他Windows7的計算機上,並得到了編譯錯誤(同時建立我的應用程序):«找不到-lQtCore4»,«找不到-lQtGui4»。這是幫助我的解決方案 - 編輯文件「qt-sources-dir/mkspecs/win32-g ++/qmake.conf」。設置QMAKE_LFLAGS = -static -static-libgcc

  • create conf。在QT源目錄bat文件與配置:

configure -release -static -qt-zlib -nomake examples -nomake demos -no-qt3support -no-scripttools -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-sql-sqlite -openssl OPENSSL_LIBS="-lssl -lcrypto -lgdi32 -luser32" -I MyOpenSSLdir\include -L MyOpenSSLdir

  • 運行cmd。在mingw文件夾中運行mingwvars.bat。在qt sources文件夾中運行conf.bat(或將sources文件夾添加到PATH中,並從另一個目錄運行它,以從源中分離安裝)。編譯Qt需要幾個小時。

  • 添加到項目的.pro文件:INCLUDEPATH += OpenSSLdir/include/

我認爲它可以幫助別人。

1

您確定需要-openssl-linked?我們總是用動態使用openssl來構建Qt。 (-openssl)

+0

是的,我需要它。我想讓我的.exe不依賴於libeay和libssl。 – Eddie 2012-04-16 07:08:00

+0

儘管我應該嘗試一下,因爲在此之前,我嘗試使用安裝的openssl編譯qt,現在它已經用mingw編譯了。 – Eddie 2012-04-16 07:22:32

+1

將需要-openssl-linked openssl,並且如果沒有它,應用程序將無法啓動。但是,如果你使用-openssl flag -qt,嘗試加載openssl synamicaly,如果它不能被加載 - 根本不使用它(在這種情況下,應用程序將運行,但如果你使用ssl套接字(例如) - 他們wouldn沒有工作)。 – PSyton 2012-04-16 13:37:42