在windows环境下,在qt中编译psi是个比较费时费事的事情,今天终于编译通过,在这里记录一下。
psi需要三个东西的支持,qca,qca-ossl,openssl,每一个都可以在google中单独的搜索XXX编译查到,如搜索qca编译得到qca的安装编译方法。
其实每一个的意思是实现第三方插件在qt中的使用,因此如果不熟悉qt,或者不熟悉插件的编译使用方法,是比较麻烦的事情。
下面总结一下我在其中遇到的问题
1、“undefined reference to unzOpen()”
在文件中明明看到了unzOpen()函数,并且也已经能调用了,可是在编译的时候就是通不过!
这个问题可以归结到qt undefined reference to***的问题,究其原因是因为我使用了.c文件,而我们知道qt是c++环境,这样势必是不兼容的
我在文件加入了
#ifdef __cplusplus
extern "C" {
#endif
你的程序
#ifdef __cplusplus
}
#endif
此时问题来了!!!!!!!!!!!!!!!
问题依然存在。
所以我必须要自己动手编译文件了,我在网上搜到了这篇文章,http://wenku.baidu.com/view/1f26d41455270722192ef722.html,感谢楼主的整理,让我少花很多时间!
我也会单独写一篇文章记录下来。《qt4中如何调用C函数》http://blog.csdn.net/cgzhello1/article/details/19190597
按照里面说的,我成功的解决了问题。
当然了,此类问题还有可能是因为类库没有编译,以及编译完成后没有将相应的动态库和静态库添加到qt文件和windows,或者在.pro(工程文件)没有添加的问题。
这个问题可以在网上搜索qt ***编译即可。
2、qca编译时cannot find file -lqcad
关于qca的编译过程请查看http://blog.csdn.net/cgzhello1/article/details/19190119
when you get errors like "cannot find file -lqcad",
try to edit crypto.prf file find that string and change them to correct one
(note, qca souce debug mode will add letter 'd' after each library name)
3. copy lib/*.dll from each project to D:\work\cpp\program\QtSDK\Desktop\Qt\4.7.4\mingw\plugins\crypto
4. add CONFIG+=crypto.prf in your pro file
5. copy libeay32.dll,ssleay32.dll,qca2.dll,qca-ossl2.dll to your project/debug(or release) folder.
6. copy folder qca-2.0.3\include\QtCrypto to your project folder, you need include QtCrypto header file in your source.
7. Done!
3、cannot find QtCrypto
这个问题是因为没有将qca文件加载到工作目录下,工程文件中也没有添加CONFIG+=crypto.prf的原因。
解决办法:
第一步:将电脑中的QtCrypto文件夹找到,并复制到qt的工程目录下例如我的:c:\Qt\4.8.5\include\下
第二部:将qca编译过的
复制到相应的位置,这个位置在另一篇文章中我会提及
第三步:在工程文件中,也就是.pro文件中添加CONFIG+=crypto.prf
问题4:EVP_whirlpool' was not declared in this scope
![]()
![]()
E:\qtprogram\qca-ossl-2.0.0-beta3\qca-ossl.cpp:6815: error:'EVP_whirlpool' was not declared in this scope
解决办法:可以将其直接注释掉!
问题5:crypto.prf中dos/windows及unix格式问题
![]()
WARNING: c:\Qt\4.8.5\mkspecs\features\winlocal.prf:1:Unmatched quotes are deprecated.
WARNING: c:\Qt\4.8.5\mkspecs\features\winlocal.prf:1:Unmatched quotes are deprecated.
WARNING: c:\Qt\4.8.5\mkspecs\features\winlocal.prf:1:Unmatched quotes are deprecated.
WARNING: c:\Qt\4.8.5\mkspecs\features\winlocal.prf:1:Unmatched quotes are deprecated.
解决办1:按照网上介绍,需要crypto.prf里的将"/"改为“\",但是经过我反复试验,发现这样改也无益于事!例如下图:
![]()
QCA_INCDIR = "C:/Qt/4.8.5/include/" |
QCA_LIBDIR = "C:/Qt/4.8.5/lib/" |
解决办法2:将QCA-OSSL工程文件.pro用qt打开,直接用qt编译!
但是我在直接编译的时候又遇到了这个问题
问题7:EVP_whirlpool() was not declared in this scope
解决办法:
直接注释掉!
问题8:QtCrypto: No such file ordirectory
解决办法1:在工程文件中添加
CONFIG+=crypto.prf
解决办法2:添加绝对路径
解决办法3:
如果在添加了这些头文件后,发现明明可以连接到QtCrypto文件,却在编译时说找不到文件,说明你的连接文件时有问题的,#include<QtCrypto>其实项目是想连接到QtCrypto文件夹下面的QtCrypto文件 |
因此需要做的更改是<QtCrypto/QtCrypto> 问题9:zlib.h: No such file ordirectory
解决办法:如图,在工程文件中,添加zlib.h所在的路径 ![]()
|