You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下编译Qt 5.5.1失败,OpenSSL依赖问题求助

在Ubuntu 22.04编译Qt 5.5.1时的OpenSSL依赖问题

操作步骤

  • 下载Qt 5.5.1源码
  • 下载OpenSSL 1.0.2n并解压至/opt/openssl1.0.2
  • 执行配置命令:
    OPENSSL_LIBS='-L/opt/openssl1.0.2/lib -lssl -lcrypto' ~/src/Qt/5.5.1/configure -prefix /opt/Qt-build/5.5.1 -confirm-license -opensource -system-sqlite -nomake examples -nomake tests -openssl-linked -I /opt/openssl1.0.2/include/openssl -L /opt/openssl1.0.2/lib
    
  • 执行make命令编译

问题表现

Qt编译时仍调用系统默认的OpenSSL库(而非指定的1.0.2版本),编译报错如下:

/usr/include/openssl/types.h:157:16: note: forward declaration of ‘X509’ {aka ‘struct x509_st’}
  157 | typedef struct x509_st X509;
      |                ^~~~~~~
/home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp: In member function ‘bool QSslKeyPrivate::fromEVP_PKEY(EVP_PKEY*)’:
/home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp:81:13: error: invalid use of incomplete type ‘EVP_PKEY’ {aka ‘struct evp_pkey_st’}
   81 |     if (pkey->type == EVP_PKEY_RSA) {
      |             ^~
In file included from /usr/include/openssl/crypto.h:36,
                 from /usr/include/openssl/comp.h:22,
                 from /usr/include/openssl/ssl.h:28,
                 from /home/dev/src/Qt/5.5.1/qtbase/include/QtNetwork/5.5.1/QtNetwork/private/../../../../../src/network/ssl/qsslcontext_openssl_p.h:53,
                 from /home/dev/src/Qt/5.5.1/qtbase/include/QtNetwork/5.5.1/QtNetwork/private/qsslcontext_openssl_p.h:1,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslsocket_p.h:55,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_p.h:51,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp:36:
/usr/include/openssl/types.h:107:16: note: forward declaration of ‘EVP_PKEY’ {aka ‘struct evp_pkey_st’}
  107 | typedef struct evp_pkey_st EVP_PKEY;
      |                ^~~~~~~~~~~
/home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp:87:48: error: invalid application of ‘sizeof’ to incomplete type ‘RSA’ {aka ‘rsa_st’}
   87 |         memcpy(rsa, q_EVP_PKEY_get1_RSA(pkey), sizeof(RSA));
      |                                                ^~~~~~~~~~~
/home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp:91:18: error: invalid use of incomplete type ‘EVP_PKEY’ {aka ‘struct evp_pkey_st’}
   91 |     else if (pkey->type == EVP_PKEY_DSA) {
      |                  ^~
In file included from /usr/include/openssl/crypto.h:36,
                 from /usr/include/openssl/comp.h:22,
                 from /usr/include/openssl/ssl.h:28,
                 from /home/dev/src/Qt/5.5.1/qtbase/include/QtNetwork/5.5.1/QtNetwork/private/../../../../../src/network/ssl/qsslcontext_openssl_p.h:53,
                 from /home/dev/src/Qt/5.5.1/qtbase/include/QtNetwork/5.5.1/QtNetwork/private/qsslcontext_openssl_p.h:1,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslsocket_p.h:55,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_p.h:51,
                 from /home/dev/src/Qt/5.5.1/qtbase/src/network/ssl/qsslkey_openssl.cpp:36:
/usr/include/openssl/types.h:107:16: note: forward declaration of ‘EVP_PKEY’ {aka ‘struct evp_pkey_st’}
  107 | typedef struct evp_pkey_st EVP_PKEY;
解决方法

1. 编译安装OpenSSL 1.0.2

只解压包无法生成完整的头文件和库结构,必须编译安装:

cd /opt/openssl1.0.2
./config --prefix=/opt/openssl1.0.2 --openssldir=/opt/openssl1.0.2 shared zlib
make -j$(nproc)
sudo make install

编译完成后,/opt/openssl1.0.2/include会有完整头文件,lib下有编译好的动态库。

2. 修改Qt配置命令,强制指定OpenSSL路径

通过环境变量让编译器优先使用指定的OpenSSL,避免系统路径干扰:

export CFLAGS="-I/opt/openssl1.0.2/include"
export CXXFLAGS="-I/opt/openssl1.0.2/include"
export LDFLAGS="-L/opt/openssl1.0.2/lib -Wl,-rpath=/opt/openssl1.0.2/lib"
export OPENSSL_LIBS="-lssl -lcrypto"
~/src/Qt/5.5.1/configure -prefix /opt/Qt-build/5.5.1 -confirm-license -opensource -system-sqlite -nomake examples -nomake tests -openssl-linked
  • CFLAGS/CXXFLAGS强制编译器优先查找指定路径的头文件
  • LDFLAGS中的-Wl,-rpath确保编译后的Qt程序运行时能找到指定的OpenSSL库

3. 清理编译缓存

如果之前执行过configure或make,必须先清理缓存:

cd ~/src/Qt/5.5.1
make distclean

之后重新执行上述配置和编译命令。

4. 验证配置生效

配置完成后,查看输出日志,确认Qt检测到的OpenSSL版本为1.0.2:

OpenSSL support ....................... yes (linked to system library)

若版本不对,检查环境变量设置或OpenSSL编译是否成功。

内容的提问来源于stack exchange,提问作者luffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:37:11