android - 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(按此顺序),但错误仍然没有消失,现在这已成为我们的一大亮点。
解决方案
推荐阅读
- node.js - 使用 Cognito UnAuth 角色时的 IAM 权限问题
- ios - SwiftUI 如何打印到 PDF
- graphql - 使用 aurora 过滤 aws appsync 中的数据
- sql - 怎么看系统存储过程的定义?
- c# - 在 Asp.net core Mvc 中使用 View Component 的两个表的动态菜单递归
- angular - Angular - 等到方法返回响应
- python - ValueError 无法分配“
] - php - 试图从 mySQL 检索数据到 php 数组
- javascript - Visual Studio 将我的 javascript 文件识别为打字稿文件并导致代码中断
- python - 使用状态字典 Pytorch 保存带有权重的模型