Ubuntu+CMake,无法静态构建 C/C++ android-ndk 程序

Ubuntu+CMake, Cannot static-build C/C++ android-ndk programs

朋友,我遇到过下面这个问题,很头疼。能帮我指出问题出在哪里吗?

NDK r20b

搭建环境涉及三个库

  1. C++11/STL
  2. OpenSSL 1.1.1i
  3. 提升 1.7.0

以上三个库,通过静态库link到target-exe

答: -DANDROID_STL=c++_staticcmake命令行指定,但是make编译android-cxx-program还是需要动态加载libc++_shared.so文件!

乙: 尝试通过替换NDK工具链目录下的/so等文件进行静态编译,遇到要么找不到“C++/STL”符号,要么没有效果。

我强制cmake link libc++_static.a 文件,除了构建后文件体积变大,但是对于依赖还是需要的 libc++_shared.so!

现在不依赖libc++_shared.so都不知道怎么编译了。

补充:

因为需要编译成一个独立的exe可执行文件Android C/C++原生程序,没有通过Java/JNI调用,现在不能解决不依赖libc++_shared.so.

的问题

根据NDK C++ library support

In general, you can only use a static variant of the C++ runtime if you have one and only one shared library in your application.

Note: This rule applies to both your code and your third party dependencies.

因此,这意味着您需要使用 "-DANDROID_STL=c++_shared" 编译所有内容。

这里还有一个示例,说明使用不同的 STL 库时可能发生的情况: