基于spark是LGPL的license,所以客户端要尽量选择采用GPL协议psi,只好重新开始,第一次接触QT的程序,前前后后编译配置了整整一天,把过程中的问题记录下,以备使用(记性现在太差),所有命令行的操作都在QT Command Prompt(设置好环境变量)下而非cmd

1.安装MinGW,虽然装QT的时候会让你选择可以下载并安装,但是太慢(毕竟连欧洲速度不稳定). 

2. 安装QT(注意psi对QT的版本要求),没钱只好opensource的版本了,下载并运行qt-win-opensource-4.x.x-mingw.exe,一路next即可,选择已有的$$MinGW_HOME。

虽然有的资料中说QT安装完毕只是装了基本的lib,并未编译成dll,但是对于psi的编译并不需要,自己开始编译了一下,编译过程中提示缺少uxtheme.h和tmschema.h,下载拷贝到MinGW\include就行(这两个文件dev-cpp中都有,而且dev-cpp\bin中也有make,mingw32-make等,感觉可以不装MinGW),结果编译了一个小时(CPU:T7250,Mem:2G)左右还没停下的迹象,导致生成的.o文件提示C盘空间不足= =。

3.安装OpenSSL,没啥说的,不需要配置。安装完后把include下的东西cp到MinGW的include下. 还有libeay32.a,ssleay32.a都cp到MinGW的lib下并改后缀为.lib。系统变量中添加QTDIR,并将QT/bin,MinGW/bin添加到系统PATH。

4.编译psi.

build-win.txt中说只要把qca和qca-ossl源码解压到third-party/qca的指定目录下并取消conf_windows.pri中CONFIG +=qca-static注释即可直接编译psi,但是我还是碰到了问题,报错如下:

D:/psi-0.12/third-party/qca/libqca_psi.a(qca_securemessage.o)(.text$_ZN3QCA9Safe
TimerC1EP7QObject[QCA::SafeTimer::SafeTimer(QObject*)]+0×55):D:/psi-0.12/third-p
arty/qca/qca/src/qca_securemessage.cpp: undefined reference to `vtable for QCA::
SafeTimer’

一直没找到解决办法,只要采用单独编译qca和qca-ossl的方式。 

a.编译qca.  configwin.bat rd && qmake && mingw32-make && installwin,如果碰到”can’t find -lqca”,就参考build-win.txt修改下即可。

b.编译qca-ossl. 我是将qca-ossl.pro中有关WINLOCAL_PREFIX的读取注释掉了,直接将OPENSSL_PREFIX设置为OPENSSL的安装目录。qca-ossl.cpp的6815行碰到:EVP_whirlpool undeclared,未找到解决办法,将其注释掉了(修改:更换了OpenSSL的版本后编译没问题了,看来是有些OpenSSL的lib未包含此库,出错时采用的是0.9.8j,换成0.9.8d即可,google说i版本也行)。configwin.bat rd && qmake && mingw32-make 。完了把生成的lib中的东西cp到%%QTDIR%%\plugins\crypto(自己建crypto目录).

c.编译psi. 如果前两步没问题,这步应该没问题,生成src/release下的psi.exe,运行出现错误缺少qca2.dll,把qca目录下编译成拷贝到windows\system32或者release当前目录均可。

转载请注明来源:Leoncom-《win下qt以及psi的编译》
Trackback

no comment untill now

Add your comment now