---
title: ATB算子编译报错：undefined symbol with cxx11 ABI不匹配问题定位与解决-官方技术文章-昇腾社区
description: 在基于昇腾AI处理器的PyTorch训练与推理开发过程中&#xff0c;开发者常需通过ATB&#xff08;Ascend Tensor Boost&#xff09;工具链自定义算子以满足特定业务需求。在使用NNAL&#xff08;Neural Network Acceleration Library&#xff09;进行ATB算子编译时&#xff0c;部分用户反馈出现“undefined symbol
keywords: ATB,算子编译报错,ABI,不匹配问题定,位与解决,官方技术文章,昇腾社区,背景概述
url: https://www.hiascend.com/developer/techArticles/20260604-7
section: (其他)
---

# ATB算子编译报错：undefined symbol with cxx11 ABI不匹配问题定位与解决-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20260604-7
描述: 在基于昇腾AI处理器的PyTorch训练与推理开发过程中&#xff0c;开发者常需通过ATB&#xff08;Ascend Tensor Boost&#xff09;工具链自定义算子以满足特定业务需求。在使用NNAL&#xff08;Neural Network Acceleration Library&#xff09;进行ATB算子编译时&#xff0c;部分用户反馈出现“undefined symbol
关键词: ATB,算子编译报错,ABI,不匹配问题定,位与解决,官方技术文章,昇腾社区,背景概述

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

ATB算子编译报错：undefined symbol with cxx11 ABI不匹配问题定位与解决

ATB算子编译报错：undefined symbol with cxx11 ABI不匹配问题定位与解决

昇腾CANNPyTorch

发表于: 2026/06/04

15

0

## 背景概述

在基于昇腾AI处理器的PyTorch训练与推理开发过程中，开发者常需通过ATB（Ascend Tensor Boost）工具链自定义算子以满足特定业务需求。在使用NNAL（Neural Network Acceleration Library）进行ATB算子编译时，部分用户反馈出现“undefined symbol”类链接错误，错误信息中包含`cxx11`相关符号，导致编译失败。该问题本质源于C++ ABI（Application Binary Interface）版本不一致，尤其在PyTorch框架与ATB编译环境之间存在ABI差异时尤为常见。

本文基于实际开发场景，梳理该问题的典型现象、根本原因及高效解决方案，帮助开发者快速定位并修复编译异常。

## 问题现象

在CANN 8.3.RC1版本环境下，使用PyTorch 2.7.1框架进行ATB算子开发时，执行算子编译命令后报错：

```
undefined symbol: _ZTINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
```

或类似形式的符号未定义错误，提示在动态链接库中找不到对应符号。相关报错截图如下：

## 原因分析

### ABI版本差异导致符号不兼容

C++11引入了新的ABI规范（即C++11 ABI），对std::string等标准库类型的内存布局和符号命名规则进行了优化。从GCC 5.1版本起，新ABI成为默认选项。而旧版PyTorch（如2.7.1）在部分构建环境中仍使用旧版ABI（即ABI0）。

### 符号命名差异

在C++11 ABI中，std::string的符号被修饰为_ZTINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE，而旧版ABI中符号命名不同。当ATB算子以C++11 ABI编译，而运行环境的PyTorch动态库使用旧版ABI时，链接器无法找到对应符号，从而报错。

### 验证框架ABI版本

可通过以下Python命令快速判断当前PyTorch框架使用的ABI版本：

```
python 
import torch 
print(torch.compiled_with_cxx11_abi()) 
```

若返回 False，表示使用旧版ABI（ABI0）；

若返回 True，表示使用新版ABI（ABI1）。

本案例中，用户环境返回 False，说明PyTorch框架基于旧版ABI构建，与默认使用新版ABI的NNAL编译环境不兼容。

## 解决措施

为确保ATB算子编译与运行环境的ABI一致性，需强制NNAL使用与PyTorch框架一致的旧版ABI进行编译。

执行以下命令，设置NNAL编译环境为旧版ABI：

```bash
source ${nnal_install_path}/nnal/atb/set_env.sh --cxx_abi=0
```

✅ 说明：--cxx_abi=0 表示启用旧版ABI（ABI0）；该命令需在执行ATB编译前运行，确保环境变量生效；该方案适用于PyTorch框架使用旧版ABI的场景，可有效避免因ABI不匹配导致的链接失败。

## 附加建议

若后续升级PyTorch版本，建议重新验证`torch.compiled_with_cxx11_abi()`返回值，确保编译环境与运行环境ABI一致；

在跨环境部署ATB算子时，建议统一构建与运行环境的ABI配置，避免潜在兼容性问题；

如需使用C++11 ABI，应确保PyTorch框架本身也以相同ABI编译，否则仍会引发链接错误。

## 总结

当ATB算子编译出现`undefined symbol: ...cxx11...`类错误时，应优先排查C++ ABI版本一致性问题。通过`torch.compiled_with_cxx11_abi()`快速确认框架ABI版本，并使用`set_env.sh --cxx_abi=0`强制NNAL使用旧版ABI，即可高效解决该类编译异常，保障算子开发流程顺利进行。

点赞 0

本页内容

背景概述 [了解详情](https://www.hiascend.com/#id-1)

问题现象 [了解详情](https://www.hiascend.com/#id-2)

原因分析 [了解详情](https://www.hiascend.com/#id-3)

解决措施 [了解详情](https://www.hiascend.com/#id-4)

附加建议 [了解详情](https://www.hiascend.com/#id-5)

总结 [了解详情](https://www.hiascend.com/#id-6)
