强制系统 QT 库使用应用程序附带的 openssl 库

Force system QT libraries to use openssl libraries shipped with the application

我的申请=libssl.so(1.0.2f)+libcrypto.so(1.0.2f)+my_app_exe

在 Debian 9 上,QT 版本为 5.7,openssl 为 1.0.2l

my_app_exe returns 1.0.2l for QSslSocket::sslLibraryVersionString(),表示使用系统openssl版本

我可以强制 QT 库以某种方式使用我的应用程序附带的 openssl 吗?

我尝试使用 QCoreApplication::addLibraryPath(const QString &path) 设置库路径,但 QT 库仍然选择系统 openssl 版本。

限制条件:

my_app_exe 已经使用 RPATH,它指向发布的 openssl 所在的当前目录。

在 Debian 9 上,如果我使用 QLibrary 调用预加载(加载它们作为 main() 中的第一件事),我能够加载正确的 SSL 和加密库。这正是 QT 库正在做的 loadOpenSsl()

    int main()
    {
        QLibrary libcrypto, libssl;
        libcrypto.setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));    
        libssl.setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));

        ...<snipped>...
        return 0;
     }

记住,我还在应用程序上设置了 RPATH

$ objdump -x my_app_exe | grep -i RPATH
  RPATH                $ORIGIN/lib

加密库存储在 ./my_app_exe/lib/lib{ssl,crypto}.so

顺便说一句,设置 LD_LIBRARY_PATH 对我不起作用。