Clang 错误 - 未找到 stddef 文件?

问题描述 投票:0回答:6

升级到 Ubuntu 13.10“Saucy”后,Clang 现在给出错误消息:

clang -Wall -Werror -std=c99 -ggdb -O0 5.1.c -o 5.1
In file included from 5.1.c:1:
/usr/include/stdio.h:33:11: fatal error: 'stddef.h' file not found
# include <stddef.h>
          ^
1 error generated.
make: *** [5.1] Error 1

顺便说一句,我包含的标题是

stdio.h
不是
stddef.h
但我假设
stdio.h
引用或
#includes
stddef.h

c linux ubuntu clang stdio
6个回答
22
投票

当我尝试在未安装

clang-tidy
的情况下运行
clang
时,出现此错误。

安装 clang 修复了此错误。 IMO 当

clang-tidy
在 GCC 和系统路径中查找标头并且这些标头的
clang
版本/符号链接丢失时,会发生此错误。


9
投票

这是 ubuntu 中的一个已知错误。看看这里:https://bugs.launchpad.net/ubuntu/+source/llvm-defaults/+bug/1242300

看来临时解决方法是更正符号链接:

对于 3.5 LLVM 工具链,符号链接似乎 /usr/lib/clang/3.5/include 错误地指向 ../../llvm-3.4/lib/clang/3.5/include,但应该指向 ../../llvm-3.5/lib/clang/3.5/include

解决方法(当然)是手动更正符号链接。

对于 3.4 工具链,/usr/lib/clang/3.4/include 不存在于 全部。我还没有在 Ubuntu 上尝试过 LLVM 3.4 所以我不知道是否创建 到 ../../llvm-3.4/lib/clang/3.4/include 的符号链接将修复 问题,但看起来确实有可能。

来源


3
投票

使用 cmake 和 gcc 中的 clang-tidy,您可以在 CMakeLists.txt 中添加以下内容

if(CMAKE_EXPORT_COMPILE_COMMANDS)
    set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
endif()

这将导致“compile_commands.json”文件包含正确的 gcc 包含内容。

解决方案来自 kitware 问题跟踪器:compile_commands.json 中缺少 c++ 标头路径

这个答案有点偏离主题,但这是我的特定问题在搜索引擎上的最高点击率


2
投票

请注意,我通过执行以下操作解决了上述错误:

$ sudo apt-get install clang

在我的特定情况下,我的

cmake
文件中的某些内容可能存在问题,但我尚未确定。


0
投票

就我而言,这是因为文件 compile_commands.json 不存在,只是

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .

解决它。


0
投票

对于 clang16,你可以尝试这个:

export CPLUS_INCLUDE_PATH=/usr/lib/llvm-16/lib/clang/16/include/

(将“llvm-16/lib/clang/16”替换为您安装的实际版本)

© www.soinside.com 2019 - 2024. All rights reserved.