You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bazel与Android NDK编译时静态链接libc++的方法

静态链接Android NDK libc++的解决方案

方法1:修改BUILD文件中的cc_library规则

直接在你的C库规则里添加编译和链接选项,强制静态链接libc,同时确保RTTI启用:

load("@rules_cc//cc:defs.bzl", "cc_library")

cc_library(
    name = "test",
    srcs = glob(["**/*.cpp"]) + glob(["**/*.hpp"]),
    hdrs = glob(["**/*.hpp"]),
    copts = [
        "-frtti",  # 显式启用RTTI(NDK clang默认可能开启,保险起见加上)
        "-static-libc++",  # 告诉编译器静态链接libc++
    ],
    linkopts = [
        "-static-libc++",  # 告诉链接器静态链接libc++
    ],
)

方法2:通过编译命令行全局设置

如果不想改动BUILD文件,编译时直接追加参数即可:

bazel build \
    --platforms=@io_bazel_rules_go//go/toolchain:android_arm64_cgo \
    --extra_toolchains=@androidndk//:all \
    --copt="-frtti" \
    --linkopt="-static-libc++" \
    //...

验证效果

编译完成后,重新执行readelf -d libtest.so,如果输出里没有NEEDED Shared library: [libc++_shared.so]这一项,就说明静态链接成功了,不需要再分发libc++_shared.so。

注意:静态链接后库文件体积会有所增大,但避免了依赖外部的libc++_shared.so。如果你的代码依赖了只能动态链接的NDK组件,这种方法可能不适用,但常规C++库场景下没问题。

内容的提问来源于stack exchange,提问作者plamkata__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:12