创建仓库

This commit is contained in:
2025-12-11 07:24:36 +08:00
commit 0d81c1792d
128 changed files with 15104 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
---
tags: []
date created: 星期三, 十一月 19日 2025, 4:34:58 下午
date modified: 星期三, 十一月 19日 2025, 4:49:09 下午
---
# 1.2.1 Host 端编译器规范 (Host Compiler Spec)
**1. Host 编译器身份确证 (Host Compiler Identity)**
- **关键性****P0**
- **信息解析**
- **绝对路径**`/usr/bin/g++`
- **版本指纹****GCC 7.3.0 (aarch64)**。
- **深度解读**此版本与前序审计1.1.1中内核构建所用的编译器完全一致。这意味着用户态程序Host Code与内核态驱动Kernel Module拥有相同的 ABI二进制接口边界极大降低了 `insmod` 时的版本冲突风险。
- **探测命令与结果**
```bash
/usr/bin/g++ --version
g++ (GCC) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
```
```bash
ls -l /usr/bin/g++
-rwxr-xr-x 4 root root 988400 2月 21 2022 /usr/bin/g++
```
**2. 默认语言标准支持 (Default C++ Standard)**
- **关键性****P1**
- **信息解析**
- **宏定义值**`201402L`。
- **标准映射**:对应 **C++14** (GNU++14)。
- **工程约束**:当前环境默认支持 C++14 特性(如 `std::make_unique`, `lambda capture`)。若项目代码依赖 C++17如 `std::filesystem`, `std::optional`),必须在 `CMakeLists.txt` 中显式配置 `set(CMAKE_CXX_STANDARD 17)`,否则将导致编译失败。
- **探测命令与结果**
```bash
/usr/bin/g++ -dM -E -x c++ /dev/null | grep __cplusplus
#define __cplusplus 201402L
```
**3. Device 编译器与工具链锚定 (Device Compiler & Toolchain Binding)**
- **关键性****P0**
- **信息解析**
- **编译器版本****Clang 18.1.8** (CoreX 4.3.8 Build)。这是一个非常新的版本,对现代 C++ 语法支持极佳。
- **工具链锚定 (Crucial)**`Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7.3.0`。
- **深度解读**这是异构编译中最关键的“握手”。Clang 本身不带标准库libstdc++),它必须“借用”系统 GCC 的库。此处显示 Clang 已正确探测并绑定到了系统 GCC 7.3.0。若此处显示 `None` 或错误路径,链接阶段将必现 `undefined reference to std::…` 错误。
- **探测命令与结果**
```bash
which clang++
/usr/local/corex-4.3.8/bin/clang++
```
```bash
clang++ -v 2>&1 | grep "Selected GCC installation"
Selected GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7.3.0
```
**4. 构建系统缓存状态 (Build System Cache State)**
- **关键性****P1**
- **信息解析**
- **编译器锁定**`CMAKE_CXX_COMPILER` 明确被锁定为 `/usr/bin/g++`,未被环境变量(如 `CC`/`CXX`)篡改为其他版本。
- **发布模式优化**`CMAKE_CXX_FLAGS_RELEASE` 设为 `-O3 -DNDEBUG`。对于雷达信号处理这类计算密集型任务,`-O3` 开启了循环向量化Loop Vectorization这对 ARM64 NEON 指令集优化至关重要。
- **探测命令与结果**
```bash
grep -E "CMAKE_CXX_COMPILER|CMAKE_CXX_FLAGS" …/build/CMakeCache.txt
CMAKE_CXX_COMPILER:STRING=/usr/bin/g++
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
```
**5. 产物真实性审计 (Artifact Verification)**
- **关键性****P2**
- **信息解析**
- **二进制指纹**`.o` 文件的 `.comment` 段中包含 `GCC: (GNU) 7.3.0`。
- **结论**:这证实了最终生成的机器码确实是由 GCC 7.3 编译的,排除了 CMake 只是“看起来”配置了 g++ 但实际调用了其他编译器的可能性(这种情况在存在 `ccache` 或 `distcc` 时偶有发生)。
- **探测命令与结果**
```bash
find … -name "*.o" … | grep "GCC: ("
GCC: (GNU) 7.3.0
```