---
title: 不同编译器对built-in includes的实现不同
description: "```"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0046.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_06_0046.html
indexId: 09e75a2f1e729055012eea5e3be2ca293ea19b0683a525000f61505a2a07603274
---
# 不同编译器对built-in includes的实现不同

#### 错误信息

```
error: typedef redefinition with different types ('__uint64_t' (aka 'unsigned long') vs 'UINT64' (aka 'unsigned long long')) 
error: unknown type name 'wchar_t'
```


#### 问题介绍

某些头文件（例如“stdatomic.h、stdint.h”）是由编译器实现的，不同的编译器对于这些文件的实现存在差异，因此使用GCC头文件实现的程序，切换到Clang之后，用户自定义的代码可能会与Clang头文件发生冲突。

比如说重定义问题：在Clang的某些头文件中定义了一些在对应GCC的头文件中没有定义的变量，而用户在自己编写的或引入的其它库的头文件也定义了该变量，变量被重复定义，导致redefinition错误。

又或者：在GCC的built-in头文件中定义了一些变量，而Clang对应的头文件中没有定义该变量，用户在自己编写的代码中直接使用了该变量，结果就会导致unknown type的错误。


#### 解决方案

建议修改源码。
