首页 > 解决方案 > Qt 与 OpenSSL 和 gRPC 产生链接问题

问题描述

在我们用于 Android (C++) 的 Qt 项目中,我们希望使用 gRPC,其中也包括使用 OpenSSL。

尝试运行应用程序时出现以下错误:

W/System.err(23847):原因:java.lang.UnsatisfiedLinkError:dlopen 失败:找不到“/data/app/com.ourapp.service-_IlywsPF_RnagtFsY1ux_Q==/lib/arm/libgrpc”引用的符号“SSL_set_tlsext_host_name” 。所以”...

我们对问题的解释是gRPC找不到这个函数SSL_set_tlsext_host_name。对 libgrpc.so 文件执行 readelf 显示它是“UND”,这意味着它被引用但未定义。

我们所做的是下载 OpenSSL 1.1.1 并将其编译为 Android C++ (API 21),如下所示:Qt for Android 和 BoringSSL。这产生了 libssl.so 和 libcrypto.so。对 libssl.so 文件执行 readelf 向我们展示了 SSL_set_tlsext_host_name 函数确实在该库中定义。

我们已经在 Qt Creator 中链接到 libssl、libcrypto 和 libgrpc(按此顺序),但错误仍然没有消失,现在这已成为我们的一大亮点。

标签: androidc++qtopenssl

解决方案


推荐阅读