创建仓库
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# 1.2.4 混合编译兼容性 (Hybrid Compilation Compatibility)
|
||||
|
||||
**1. C++ 标准库 ABI 兼容性 (StdLib ABI Compatibility)**
|
||||
|
||||
- **关键性**:**P0** (Showstopper)
|
||||
- **信息解析**:
|
||||
- **GCC 状态**:`#define _GLIBCXX_USE_CXX11_ABI 1`
|
||||
- **Clang 状态**:`#define _GLIBCXX_USE_CXX11_ABI 1`
|
||||
- **深度解读**:这是混合编译成败的关键。GCC 5.1 引入了新版 `std::string` 和 `std::list` 实现(符合 C++11 标准),并使用 Dual ABI 机制。如果两个编译器此宏定义不一致(例如一个为 0 一个为 1),链接器将无法匹配标准库符号。
|
||||
- **结论**:两者完全对齐,**无需**在 CMake 中手动添加 `-D_GLIBCXX_USE_CXX11_ABI=0`。
|
||||
- **探测命令与结果**:
|
||||
```bash
|
||||
echo "#include <string>" | g++ … | grep ABI
|
||||
#define _GLIBCXX_USE_CXX11_ABI 1
|
||||
echo "#include <string>" | clang++ … | grep ABI
|
||||
#define _GLIBCXX_USE_CXX11_ABI 1
|
||||
```
|
||||
|
||||
**2. 目标架构与指令集基线 (Target Architecture Baseline)**
|
||||
|
||||
- **关键性**:**P1**
|
||||
- **信息解析**:
|
||||
- **宏定义检查**:两者均定义了 `__aarch64__` 和 `__ARM_ARCH 8`,且**均未定义** `__ARM_FEATURE_ATOMICS`。
|
||||
- **原子指令策略**:
|
||||
* 现代 ARMv8.1+ 引入了 LSE (Large System Extensions) 原子指令(如 `ldadd`, `cas`),性能远超传统的 LL/SC (Load-Link/Store-Conditional, 即 `ldxr/stxr`) 循环。
|
||||
* 由于宏缺失且 grep `ldadd` 无输出,说明两个编译器都**回退到了保守的 LL/SC 模式**。
|
||||
- **风险评估**:考虑到飞腾 S5000C 基于 ARMv8 架构,这种保守策略是**最安全**的。强制开启 LSE (`-march=armv8.1-a+lse`) 虽然可能提升原子计数器性能,但在旧微架构上会导致 `SIGILL` (非法指令崩溃)。
|
||||
- **探测命令与结果**:
|
||||
```bash
|
||||
g++ … | grep __ARM_FEATURE_ATOMICS
|
||||
(空) -> 未启用 LSE
|
||||
clang++ … | grep __ARM_FEATURE_ATOMICS
|
||||
(空) -> 未启用 LSE
|
||||
```
|
||||
|
||||
**3. 编译标志警告 (Compiler Flags Warning)**
|
||||
|
||||
- **关键性**:**P2**
|
||||
- **信息解析**:
|
||||
- **重复警告**:Clang 再次提示 `'-x cuda' will not be supported`。
|
||||
- **行动项**:在 **1.2.2** 中已记录,需在 `CMakeLists.txt` 中修正语言标志。
|
||||
- **探测命令与结果**:
|
||||
```text
|
||||
clang++: warning: … need replace with '-x ivcore' …
|
||||
```
|
||||
Reference in New Issue
Block a user