android - Ubuntu+CMake,无法静态构建 C/C++ android-ndk 程序
问题描述
我的朋友,我遇到了以下让我头疼的问题。你能帮我指出问题出在哪里吗?
NDK r20b
搭建环境涉及三个库
- C++ 11/STL
- OpenSSL 1.1.1i
- 提升 1.7.0
以上三个库,通过静态库链接到target-exe
A:
-DANDROID_STL=c++_static
是在cmake
命令行指定的,但是make编译后android-cxx-program
还是需要动态加载libc++_shared.so
文件!</p>
B:我尝试通过替换NDK工具链目录下的/so等文件进行静态编译,结果要么找不到符号“C++/STL”,要么没有效果。
我强制cmake链接libc++_static.a
文件,除了构建文件量增加后,但仍然需要依赖libc++_shared.so
!
现在我不知道如何编译而不依赖libc++_shared.so
.
补充:
因为,需要编译成独立的exe可执行Android C/C++原生程序,不通过Java/JNI调用,现在解决不了不依赖的问题libc++_shared.so
。
解决方案
根据NDK C++ 库支持:
通常,如果您的应用程序中只有一个共享库,则只能使用 C++ 运行时的静态变体。
注意:此规则适用于您的代码和第三方依赖项。
因此,这意味着您需要使用"-DANDROID_STL=c++_shared"
.
这里还有一个使用不同 STL 库时可能发生的示例:https ://stackoverflow.com/a/66050613/5130269
推荐阅读
- salesforce - 从 Mule4 插入销售人员检查
- android - 使用 makeReadOnly() 写入锁 Ntag 424DNA 抛出失败错误
- dialogflow-es - 对谷歌缺少访问令牌的操作
- firmware - 使用 angr 分析固件文件
- selenium - 网络抓取期间的“消息:无效会话 ID”
- java - 在具有超类的 JPA 中创建规范
- bash - 列出带有关联容器的 docker 镜像
- django-viewflow - Viewflow:获取当前待处理任务的最佳/规范方法是什么?
- mysql - SQL Join 花费了太多时间
- node.js - 如何从 HTTP 请求中获取浏览器和操作系统?