最近遇到一个奇怪的bug,记录一下
客户使用qt5.12.2编译客户的程序,一切正常。使用我提供的qt5.13.2的编译报错。报错如下,显示报错的原因看上去是代码类的写的有问题。
自己写了个QSslConfiguration的demo,在一台x86的Ubuntu20安装了qt5.13,发现是可以编译OK的。在ARM上就编译不过,而且报错也是 variable 'QSslConfiguration conf' has initializer but incomplete type
demo地址:
https://download.youkuaiyun.com/download/linbounconstraint/87554547?spm=1001.2014.3001.5501
Qt官方的sslechoserver例子,编译的话,也是QSslConfiguration 报错。所以初步感觉可能不是代码的问题,是ARM版本的qt,编译的有问题。QSslConfiguration是Network下的类,感觉像是openssl导致的。
后来发现的确是,在编译Network项,没打开openssl。
按如下步骤,重新编译。
root用户执行
1.
apt-get install libssl-dev
2.在qt-everywhere-src-5.13.2目录下
./configure -prefix /usr/local/qt-5.13.2 -release -confirm-license -opensource -nomake examples -nomake tests -recheck-all
3.
make -j 8
4.
make install
打开了Qt Network -> OpenSSL选项,然后重新编译qt即可。
Qt Network:
getifaddrs() ........................... yes
IPv6 ifname ............................ yes
libproxy ............................... no
Linux AF_NETLINK ....................... yes
OpenSSL ................................ yes
Qt directly linked to OpenSSL ........ no
OpenSSL 1.1 ............................ yes
DTLS ................................... yes
OCSP-stapling .......................... yes
SCTP ................................... no
Use system proxies ..................... yes
编译demo,和官方的sslechoserver,就一切正常了。