1. 概述
CONAN:Conan是一个用于C++项目的开源包管理工具。 它的主要目标是简化C++项目的依赖关系管理过程,使开发人员能够更轻松地集成、构建和分享C++库。 其中有一些比较独特的功能,例如:版本管理、第三方库管理等。
TPL 数据集:本文首先 CONAN recipe,并从中提取出 1753 个 TPL 名称,这些 TPL 名称将用于后续的 TPL 依赖关系提取。之后,通过网络爬虫收集各 TPL 从在的依赖关系。最后以手动编译的方式,生成 TPL 对应的二进制文件。
2. 二进制文件生成
brunsli:在 GitHub 下载 brunsli 源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /brunsli
# 克隆 brunsli 仓库
!git clone https://github.com/google/brunsli.git
# 进入项目目录
%cd brunsli
!git submodule update --init --recursive
!cmake -DCMAKE_BUILD_TYPE=Release -B out
!cmake --build out --config Release
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
c-blosc:在 GitHub 下载 c-blosc 源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /c-blosc
# 克隆 brunsli 仓库
!git clone https://github.com/Blosc/c-blosc.git
# 进入项目目录
%cd c-blosc
!mkdir build
%cd build
!cmake -DCMAKE_INSTALL_PREFIX=your_install_prefix_directory ..
!ccmake .. # run a curses-based interface
!cmake --build .
!ctest
!cmake --build . --target install
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
c-blosc2:在 GitHub 下载 c-blosc2 源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /c-blosc2
# 克隆 brunsli 仓库
!git clone https://github.com/Blosc/c-blosc2.git
# 进入项目目录
%cd c-blosc2
!mkdir build
%cd build
!cmake -DCMAKE_INSTALL_PREFIX=your_install_prefix_directory ..
!ccmake .. # run a curses-based interface
!cmake --build .
!ctest
!cmake --build . --target install
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
HdrHistogram_c:在 GitHub 下载 HdrHistogram_c 源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /HdrHistogram_c
# 克隆 brunsli 仓库
!git clone https://github.com/HdrHistogram/HdrHistogram_c.git
# 进入项目目录
%cd HdrHistogram_c
!mkdir build
%cd build
!cmake ..
!make
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
hexl:在 GitHub 下载 hexl 源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /hexl
# 克隆 brunsli 仓库
!git clone https://github.com/intel/hexl.git
# 进入项目目录
%cd hexl
!mkdir build
%cd build
!cmake ..
!make
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
HiGHS:在 GitHub 下载 HiGHS源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /HiGHS
# 克隆 brunsli 仓库
!git clone https://github.com/ERGO-Code/HiGHS.git
# 进入项目目录
%cd HiGHS
!mkdir build
%cd build
!cmake ..
!make
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
json-schema-validator:在 GitHub 下载 json-schema-validator源码,并通过 cmake 进行编译:
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
! rm -r /json-schema-validator
# 克隆 brunsli 仓库
!git clone https://github.com/pboettch/json-schema-validator.git
# 进入项目目录
%cd json-schema-validator
!mkdir build
%cd build
!cmake ..
!make
# 退出项目目录
%cd '/content/drive/MyDrive/TPL_Download/TPL_CONAN'
3. 组件识别实验
"c-blosc2": ["lz4/1.9.Z","zlib/1.3.Z","zstd/1.5.Z"]
将 c-blosc2 作为 target,将 zlib 与 zstd 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 c-blosc2 的重用关系。
"brunsli": ["brotli/1.0.Z"]
编译后的 brunsli 生成一系列测试文件,如 build_huffman_table_test、c_api_test、context_test 等。通过 IDA Pro 分析这些测试文件发现,这些测试文件与 brotli 存在许多公共函数。因此,将这些测试函数作为 target,将 brotli 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 brunsli 的重用关系。
"c-blosc": ["lz4/1.9.Z","snappy/1.1.Z","zlib/1.3.Z","zstd/1.5.Z"]
编译后的 brunsli 生成两个文件,libblosc.so.1.21.7 与 libblosc_testing.so。通过 IDA Pro 分析这些测试文件发现,这些测试文件与 zstd 和 zlib 存在许多公共函数。因此,将这些函数作为 target,将 zstd 和 zlib 作为candidate,通过 LibAM 进行组件识别。实验结果表明,LibAM 可以有效识别 brunsli 的重用关系。