首页 > 解决方案 > Ubuntu+CMake,无法静态构建 C/C++ android-ndk 程序

问题描述

我的朋友,我遇到了以下让我头疼的问题。你能帮我指出问题出在哪里吗?

NDK r20b

搭建环境涉及三个库

  1. C++ 11/STL
  2. OpenSSL 1.1.1i
  3. 提升 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

标签: androidc++android-ndk

解决方案


根据NDK C++ 库支持

通常,如果您的应用程序中只有一个共享库,则只能使用 C++ 运行时的静态变体。

注意:此规则适用于您的代码和第三方依赖项。

因此,这意味着您需要使用"-DANDROID_STL=c++_shared".

这里还有一个使用不同 STL 库时可能发生的示例:https ://stackoverflow.com/a/66050613/5130269


推荐阅读