Page 127 - 《软件学报》2026年第7期
P. 127
2812 软件学报 2026 年第 37 卷第 7 期
表 1 C/C++ TPL 索引库和特征库统计数据
C/C++ TPL索引数据库 (包含源代码存储库地址等信息)
托管仓库类型 托管仓库名称 特征数据库中C/C++ TPL数量
Git管理存储库数量 非Git管理存储库数量 存储库总数量
Conan 903 119 1 022 569
Vcpkg 1 253 308 1 561 726
Clib 239 52 291 205
应用程序级
Cppget 250 51 301 87
托管仓库
Xrepo 290 39 329 146
Buckaroo 274 11 285 140
Hunter 251 111 362 80
Ubuntu 11 531 3 546 15 077 2 511
Debian 20 638 6 232 26 870 7 016
操作系统级 Archlinux 4 982 8 163 13 145 1 123
托管仓库
Fedora37 5 303 9 801 15 104 1 101
openEuler 924 1 032 1 956 155
GitHub 16 756
源代码级 Gitee - 851
托管仓库
GitLab 1 634
总计 46 838 (61.4%) 29 465 (38.6%) 76 303 33 100
注: “-”表示该类源代码托管平台统一采用Git进行版本管理, 因此不再区分Git与非Git管理存储库, 也不统计相应数量
表 2 采用 Git 管理的 C/C++ TPL 统计数据
版本管理不完善的C/C++ TPL数量 版本管理完善的C/C++ TPL数量 函数总数量 公共函数数量
6 606 26 494 30 047 290 11 453 633
目标代码 特征库
应用程序代码 SwiftShader2
特征匹配失败: 假阴性
特征匹配成功: 假阳性 Library: A
TPL: SwiftShader
TPL: SwiftShader1
图 2 版本管理不善的情况示例
(3) 迁移托管仓库导致丢失 TPL 历史版本的函数诞生时间. 例如, 开源解压软件 7-Zip 最初仅在 SourceForge
托管源码 [24] , 后仅将最新版本迁移至 GitHub 的 ip7z@7zip [25] 存储库. 与此同时, 多个非官方存储库 (如 p7zip-
project@p7zip [26] ) 已在迁移前出现, 与 ip7z@7zip 存在相同函数片段. 若以诞生时间判断函数归属, 会错误地将这
些函数归为 p7zip-project@p7zip 的一部分, 进而影响到 SCA 结果准确性.
挑战 1. 利用函数诞生时间划分公共函数归属面临多重局限: (1) 非 Git 管理的 TPL 难以获取诞生时间;
(2) TPL 版本管理不完善获取到不准确的诞生时间; (3) TPL 迁移托管库丢失诞生时间, 进而威胁到 SCA 结果的准
确性.
2.2 依赖关系缺失
现有的 SCA 工具在揭示 TPL 之间复杂依赖关系方面存在不足, 流行的 SCA 工具如 CENTRIS 等, 通常未能
提供目标代码中引用的 TPL 之间的依赖关系. 这给软件安全、合规性以及维护带来了诸多挑战. 以下两方面凸显
了研究 TPL 依赖关系分析算法的紧迫性和重要性.
● 安全漏洞的影响范围分析. 在软件项目中, 外部 TPL 的引入虽为开发带来了便利, 但同时也可能不经意间引

