Fix: libstdc++ CI Check Bug #869¶
Date: 2024-11-02\ Author: SAGE Team\ Summary: libstdc++ CI 问题修复
问题描述¶
在 CI 环境中使用 ./quickstart.sh --dev --pip --yes 安装 SAGE 时,会出现以下误导性警告信息:
预检查 libstdc++ 兼容性...
🔧 检查 libstdc++ 符号 GLIBCXX_3.4.30 ...
⚠️ 未找到与 Python 绑定的 libstdc++.so.6,尝试继续
执行: conda install -y -c conda-forge libstdcxx-ng>=13
✅ libstdc++ 升级完成,重新验证...
❌ 升级后仍未检测到 GLIBCXX_3.4.30,请考虑在目标环境重新编译扩展
⚠️ libstdc++ 检查未通过,继续尝试构建扩展
根本原因¶
- 环境不匹配: CI 使用
--pip模式安装,依赖系统的 libstdc++,而不是 conda 管理的版本 - 检查逻辑缺陷:
libstdcxx_fix.sh没有考虑安装环境类型,在 pip 环境中仍然尝试检查和升级 conda 的 libstdc++ - 误导性输出: 即使在不需要检查的环境中,也会显示失败信息
解决方案¶
1. 更新 libstdcxx_fix.sh¶
文件: tools/install/fixes/libstdcxx_fix.sh
改动:
- 添加
install_environment参数到ensure_libstdcxx_compatibility()函数 - 在函数开始时检查环境类型
- 如果使用
pip或system环境,直接跳过检查并返回成功
ensure_libstdcxx_compatibility() {
local log_file="${1:-install.log}"
local install_environment="${2:-conda}"
local required_symbol="GLIBCXX_3.4.30"
# 在 pip 或非 conda 环境中,跳过 libstdc++ 检查
# 因为 pip 环境依赖系统的 libstdc++,而不是 conda 管理的版本
if [ "$install_environment" = "pip" ] || [ "$install_environment" = "system" ]; then
echo -e "${DIM}使用 ${install_environment} 环境,跳过 libstdc++ 检查(依赖系统库)${NC}"
echo "$(date): 跳过 libstdc++ 检查(${install_environment} 环境)" >> "$log_file"
return 0
fi
# ... 继续原有的检查逻辑(仅对 conda 环境)
}
2. 更新 main_installer.sh¶
文件: tools/install/installation_table/main_installer.sh
改动:
- 在两处调用
ensure_libstdcxx_compatibility时传递$environment参数 standard模式 (line ~317)dev模式 (line ~335)
# 标准安装模式
ensure_libstdcxx_compatibility "$log_file" "$environment" || ...
# 开发者安装模式
ensure_libstdcxx_compatibility "$log_file" "$environment" || ...
测试验证¶
测试场景¶
- CI 环境 (pip 模式):
- 预期: 显示 "使用 pip 环境,跳过 libstdc++ 检查(依赖系统库)"
-
不再显示误导性的 conda 安装和失败信息
-
Conda 环境:
-
预期: 正常执行 libstdc++ 检查和升级(如果需要)
-
系统 Python 环境:
- 预期: 跳过检查(类似 pip 模式)
影响范围¶
受影响的文件¶
tools/install/fixes/libstdcxx_fix.shtools/install/installation_table/main_installer.sh
受影响的安装模式¶
standard模式dev模式
不影响的部分¶
minimal模式(不安装 C++ 扩展,不调用 libstdc++ 检查)- 已有的 conda 环境检查逻辑(保持不变)
优势¶
- 消除误导信息: CI 日志不再显示失败的 libstdc++ 升级信息
- 提高性能: pip 环境跳过不必要的检查,加快安装速度
- 更清晰的语义: 明确区分不同环境的处理方式
- 向后兼容: conda 环境的行为保持不变
- 易于维护: 逻辑更加清晰,参数传递明确
相关 Issue¶
- Issue #869: dev-ci.yml libstdc++ 兼容性检查 bug
提交信息¶
fix: skip libstdc++ check in pip/system environments (#869)
- Add install_environment parameter to ensure_libstdcxx_compatibility
- Skip libstdc++ check when using pip or system Python
- Update main_installer.sh to pass environment parameter
- Eliminate misleading warnings in CI environment
Fixes #869