Ubuntu+CMake,无法静态构建 C/C++ android-ndk 程序
Ubuntu+CMake, Cannot static-build C/C++ android-ndk programs
朋友,我遇到过下面这个问题,很头疼。能帮我指出问题出在哪里吗?
NDK r20b
搭建环境涉及三个库
- C++11/STL
- OpenSSL 1.1.1i
- 提升 1.7.0
以上三个库,通过静态库link到target-exe
答:
-DANDROID_STL=c++_static
在cmake
命令行指定,但是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
.
的问题
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 库时可能发生的情况:
朋友,我遇到过下面这个问题,很头疼。能帮我指出问题出在哪里吗?
NDK r20b
搭建环境涉及三个库
- C++11/STL
- OpenSSL 1.1.1i
- 提升 1.7.0
以上三个库,通过静态库link到target-exe
答:
-DANDROID_STL=c++_static
在cmake
命令行指定,但是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
.
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 库时可能发生的情况: