美文网首页
Android So 移除STL

Android So 移除STL

作者: CentForever | 来源:发表于2024-03-21 23:17 被阅读0次

在使用CMake构建Android项目时,可以使用参数"-DANDROID_STL=none"来指定不使用任何STL(标准模板库)。这个参数告诉CMake不要链接任何STL库,这样就可以避免在Android NDK构建过程中使用STL。

通常情况下,Android NDK支持多种STL,包括默认的C++运行时库(gnustl)、LLVM的libc++以及STLport。但是有些情况下,我们可能希望不使用任何STL,比如当我们要使用自定义的STL实现或者完全避免STL时。

使用参数"-DANDROID_STL=none"可以达到这个目的,不会链接任何STL库,需要注意的是,这也意味着在代码中使用STL相关的功能会导致链接错误,因此在使用该参数的同时需要谨慎处理STL相关的代码。

在CMakeLists.txt中,您可以这样使用这个参数:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -frtti -fexceptions")

# 在添加目标时使用参数
add_library(your_target_name SHARED src1.cpp src2.cpp)
target_compile_options(your_target_name PRIVATE -DANDROID_STL=none)
externalNativeBuild {
    cmake {
        arguments "-DANDROID_STL=none"
    }
}

-Wl,--exclude-libs,libc++_static.a-Wl,--exclude-libs,libc++abi.a是链接选项,它们的作用是告诉链接器在链接过程中排除特定的静态库文件,这里分别排除了 libc++_static.alibc++abi.a

if (${ANDROID_STL} STREQUAL "c++_static")
   target_link_options(${PROJECT_NAME} PRIVATE
           "-Wl,--exclude-libs,libc++_static.a"
           "-Wl,--exclude-libs,libc++abi.a")
endif ()
if (${ANDROID_STL} STREQUAL "c++_static")
    string(APPEND CMAKE_SHARED_LINKER_FLAGS " -Wl,--exclude-libs,libc++_static.a")
    string(APPEND CMAKE_SHARED_LINKER_FLAGS " -Wl,--exclude-libs,libc++abi.a")
endif()

相关文章

网友评论

      本文标题:Android So 移除STL

      本文链接:https://www.haomeiwen.com/subject/pgjqtjtx.html