88 lines
3.8 KiB
Markdown
88 lines
3.8 KiB
Markdown
|
|
---
|
|||
|
|
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
|
|||
|
|
```
|