2012-04-16 117 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