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

如何在GN构建系统中为依赖库添加'-whole-archive'链接参数

GN构建系统添加whole-archive链接参数的实现方案

GN原生支持你需要的链接配置,不需要手动拼接复杂的链接参数,具体实现方式如下:

方案1:优先使用原生whole_archive_deps配置(推荐)

GN专门提供了whole_archive_deps配置项用于标记需要全量链接的静态库依赖,同时默认会将所有普通deps的静态库自动放入--start-group和--end-group区间处理循环依赖,完全匹配你的需求:

shared_library("my") {
  output_name = "my"
  # 普通依赖libA、libB会自动被包裹在--start-group与--end-group范围内
  deps = [
    "//path/to/libA:target_name",
    "//path/to/libB:target_name",
  ]
  # 标记为whole_archive_deps的libC会自动被包裹在-whole-archive与-no-whole-archive范围内
  whole_archive_deps = [
    "//path/to/libC:target_name",
  ]
  # 其余自定义配置按需添加即可
}

该方案的优势是GN会自动处理依赖的传递关系,如果libC本身还有其他依赖,也会被自动添加到正确的链接顺序位置,不会出现符号丢失的问题。

方案2:手动拼接ldflags(仅适用预制静态库场景)

如果你要链接的libC是外部预制的静态库,不是通过GN目标编译生成的,可以直接在ldflags里手动指定参数顺序:

shared_library("my") {
  output_name = "my"
  deps = [
    "//path/to/libA:target_name",
    "//path/to/libB:target_name",
  ]
  # 手动指定预制静态库的whole-archive包裹逻辑
  ldflags = [
    "-Wl,-whole-archive",
    "//third_party/prebuilt/libC.a",
    "-Wl,-no-whole-archive",
  ]
}

配置完成后可以通过查看生成的ninja构建文件中的链接命令,确认参数顺序是否符合预期。


内容的提问来源于stack exchange,提问作者Hui.Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:36:03