QT怎么支持openssl

240 views
Skip to first unread message

Samuel

unread,
Oct 22, 2008, 6:15:16 AM10/22/08
to Qt中文
我是几天前才开始学习QT的,版本是qt-win-opensource-src-4.3.4,编译是默认(configure + nmake).
可是qtdemo里面的network/securesocketclient不能运行,手工编译也出错了.
于是重新跑回去看configure -help,发现下面的信息:
-no-openssl ........ Do not compile in OpenSSL support
+ -openssl ........... Compile in OpenSSL support
(A plus (+) denotes a default value that needs to be evaluated.)
问题来了:
1.怎么才能让qt检测到openssl呢?
2.怎样只编译openssl这部分,而不是再来一次几小时的浩大工程?

vivian

unread,
Oct 22, 2008, 7:33:34 AM10/22/08
to qt-c...@googlegroups.com
缺省是 -openssl ,应该是带了OpenSSL support了啊。
编译securesocketclient出错应该是其它的原因吧?

2008/10/22 Samuel <PrinceOfD...@gmail.com>



--
不抛弃 不放弃
www.bilive.com
做优秀的软件

Samuel Chi

unread,
Oct 23, 2008, 4:08:20 AM10/23/08
to qt-c...@googlegroups.com


2008/10/22 vivian <icevi...@gmail.com>

缺省是 -openssl ,应该是带了OpenSSL support了啊。
编译securesocketclient出错应该是其它的原因吧?

查看src/network/Makefile,里面确实没有包含qssl*
打开network.pro,在头部手动添加
QT_CONFIG += openssl
然后qmake并nmake,就出了一大堆错误
qsslcertificate.cpp
f:\qt-win-opensource-src-4.3.4\src\network\qsslsocket_p.h(84) : error C2143: 语法错误 : 缺少";"(在"*"的前面)
f:\qt-win-opensource-src-4.3.4\src\network\qsslsocket_p.h(84) : error C2433: "QSslSocketPrivate::QSslSocket": 不允许在数据声明中使用"inline"
f:\qt-win-opensource-src-4.3.4\src\network\qsslsocket_p.h(84) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
f:\qt-win-opensource-src-4.3.4\src\network\qsslsocket_p.h(84) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
f:\qt-win-opensource-src-4.3.4\src\network\qsslsocket_p.h(84) : warning C4183: "q_func": 缺少返回类型;假定为返回"int"的成员函数
..........

再看network.pro,发现一些奇怪的地方
# OpenSSL support; compile in QSslSocket.
contains(QT_CONFIG, openssl) {
    include($$QT_SOURCE_TREE/config.tests/unix/openssl/openssl.pri)
# 一是qt下面就没有config.tests目录,二来怎么会是*/unix/*呢?
    HEADERS += qssl.h \
               qsslcertificate.h \
               qsslcertificate_p.h \
               qsslcipher.h \
               qsslcipher_p.h \
               qsslerror.h \
               qsslkey.h \
               qsslsocket.h \
               qsslsocket_openssl_p.h \
               qsslsocket_openssl_symbols_p.h \
               qsslsocket_p.h
    SOURCES += qssl.cpp \
               qsslcertificate.cpp \
               qsslcipher.cpp \
               qsslerror.cpp \
               qsslkey.cpp \
               qsslsocket.cpp \
               qsslsocket_openssl.cpp \
               qsslsocket_openssl_symbols.cpp

    # Only for static builds, we link against OpenSSL.
    contains(CONFIG, static) {
        win32:LIBS += -lssleay32 -llibeay32
        unix:LIBS += -lssl -lcrypto
    }

    # Include Qt's default CA bundle
    RESOURCES += network.qrc
}

请教在winxp下编译成功过openssl的兄弟,介绍一下经验好么?

Liang Qi

unread,
Oct 23, 2008, 8:06:15 AM10/23/08
to qt-c...@googlegroups.com
openssl你装了么?你需要把openssl的header路径放到INCLUDE环境变量中,dll的路径放到PATH中,估计需要检查编译器版本是否一致,然后你再试试。

好像只能在configure中修改参数。

2008/10/22 Samuel <PrinceOfD...@gmail.com>:

Samuel Chi

unread,
Oct 23, 2008, 10:30:02 AM10/23/08
to qt-c...@googlegroups.com


2008/10/23 Liang Qi <cavend...@gmail.com>

openssl你装了么?你需要把openssl的header路径放到INCLUDE环境变量中,dll的路径放到PATH中,估计需要检查编译器版本是否一致,然后你再试试。
恩,谢谢提示,已经下载并编译好了.


好像只能在configure中修改参数。
接下来怎么改参数,并只编译network部分呢?

Liang Qi

unread,
Oct 23, 2008, 12:06:59 PM10/23/08
to qt-c...@googlegroups.com
2008/10/23 Samuel Chi <princeofd...@gmail.com>:

> 2008/10/23 Liang Qi <cavend...@gmail.com>
>> openssl你装了么?你需要把openssl的header路径放到INCLUDE环境变量中,dll的路径放到PATH中,估计需要检查编译器版本是否一致,然后你再试试。
>
> 恩,谢谢提示,已经下载并编译好了.
>>
>>
>> 好像只能在configure中修改参数。
>
> 接下来怎么改参数,并只编译network部分呢?
好像没有,configure.exe -release -openssl
然后nmake sub-src
会省些时间

ziegler

unread,
Oct 24, 2008, 12:32:29 AM10/24/08
to Qt中文

Qt对OpenSSL的支持只限于SecureSocket吗?
有没有非对称加密的接口?

On 10月24日, 上午12时06分, "Liang Qi" <cavendish...@gmail.com> wrote:
> 2008/10/23 Samuel Chi <princeofdatamin...@gmail.com>:> 2008/10/23 Liang Qi <cavendish...@gmail.com>

Samuel Chi

unread,
Oct 24, 2008, 2:33:08 AM10/24/08
to qt-c...@googlegroups.com


2008/10/24 Liang Qi <cavend...@gmail.com>

搞定了,原来是需要设置环境变量里面的include和lib,我最开始只是把它添加到vs的include和lib去了.

ps: configure的 -buildkey <key> 不知道怎么用.
configure -buildkey sub-network(或者network)都没有用.

Liang Qi

unread,
Oct 27, 2008, 8:56:42 AM10/27/08
to qt-c...@googlegroups.com
http://cavendishqi.blogspot.com/2008/10/build-qt-with-openssl-vc-2005-eesp1-on.html

不过我用VC 2008 EE with SP1编译不了openssl,总是有错误。

齐亮

Samuel Chi

unread,
Oct 27, 2008, 11:28:10 AM10/27/08
to qt-c...@googlegroups.com


2008/10/27 Liang Qi <cavend...@gmail.com>

http://cavendishqi.blogspot.com/2008/10/build-qt-with-openssl-vc-2005-eesp1-on.html

不过我用VC 2008 EE with SP1编译不了openssl,总是有错误。

我一开始也是编译有问题,后来又看了根目录下的INSTALL.W32文件:
 - If you are using MASM then run:

   > ms\do_masm

 - If you are using NASM then run:

   > ms\do_nasm
编译步骤如下:
1) perl Configure VC-WIN32 --prefix=f:/openssl
然后去下了个NASM( http://www.nasm.us/ )(MASM没试过):
当然记得把nasm加入path:)
2) ms\do_nasm
3) nmake -f ms\nt.mak
4) nmake -f ms\ntdll.mak
5) nmake -f ms\ntdll.mak install
就可以了。

ps: 估计openssl里面对于no_asm部分在window下处理不了
psps: 第五步有时候可以,有时候不可以(创建完bin,include,lib目录就有错误了,只能手动copy)



齐亮
 
Reply all
Reply to author
Forward
0 new messages