QtCreator在Linux上找不到stddef.h文件

6

我刚刚安装了版本为Qt Creator 4.1.0,基于Qt 5.7.0 (GCC 4.9.1 20140922(Red Hat 4.9.1-10),64位)。

在我解决所有工具包错误之后,这个错误让我发疯了,实际上我在谷歌上花了一些时间寻找适当的编译器。我认为这可能与编译器版本有关:

/usr/include/c++/5.3.1/cstddef:45: error: stddef.h: No such file or directory

我看到Windows的解决方案无处不在,但在Linux上找不到,有人有经验如何解决吗?

截图

Compilers

Qt versions

Kits

rpm -qa | grep devel | sort

expat-devel-2.1.0-10.fc22.x86_64
fontconfig-devel-2.11.94-4.fc22.x86_64
freetype-devel-2.5.5-2.fc22.x86_64
gdbm-devel-1.11-4.fc22.x86_64
glibc-devel-2.21-13.fc22.i686
glibc-devel-2.21-13.fc22.x86_64
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.fc22.x86_64
kernel-debug-devel-4.2.5-201.fc22.x86_64
kernel-debug-devel-4.2.6-200.fc22.x86_64
kernel-devel-4.2.6-200.fc22.x86_64
libdb-devel-5.3.28-12.fc22.x86_64
libdrm-devel-2.4.61-3.fc22.x86_64
libICE-devel-1.0.9-2.fc22.x86_64
libpng-devel-1.6.16-3.fc22.x86_64
libSM-devel-1.2.2-2.fc22.x86_64
libstdc++-devel-5.3.1-6.fc22.i686
libstdc++-devel-5.3.1-6.fc22.x86_64
libXau-devel-1.0.8-4.fc22.x86_64
libxcb-devel-1.11-8.fc22.x86_64
libXcursor-devel-1.1.14-4.fc22.x86_64
libXdamage-devel-1.1.4-6.fc22.x86_64
libXext-devel-1.3.3-2.fc22.x86_64
libXfixes-devel-5.0.1-4.fc22.x86_64
libXft-devel-2.3.2-2.fc22.x86_64
libXi-devel-1.7.4-2.fc22.x86_64
libXinerama-devel-1.1.3-4.fc22.x86_64
libXrandr-devel-1.4.2-2.fc22.x86_64
libXrender-devel-0.9.9-1.fc22.x86_64
libxshmfence-devel-1.2-1.fc22.x86_64
libXt-devel-1.1.4-10.fc22.x86_64
libXv-devel-1.0.10-2.fc22.x86_64
libXxf86vm-devel-1.1.4-1.fc22.x86_64
libX11-devel-1.6.3-1.fc22.x86_64
mesa-libGL-devel-10.6.9-1.20151008.fc22.x86_64
mesa-libGLU-devel-9.0.0-7.fc22.x86_64
perl-devel-5.20.3-328.fc22.x86_64
python3-devel-3.4.2-6.fc22.x86_64
qt-devel-4.8.7-4.fc22.x86_64
systemtap-devel-2.9-1.fc22.x86_64
systemtap-sdt-devel-2.9-1.fc22.x86_64
xorg-x11-proto-devel-7.7-12.fc21.noarch
zlib-devel-1.2.8-7.fc22.x86_64

你是怎么“修复”你的工具包错误的呢?请附上以下Build&Run配置面板的截图:KitsQt VersionsCompilers。同时也包括rpm -qa|sort|grep devel的结果。 - Kuba hasn't forgotten Monica
@KubaOber 添加了 - Dušan Tichý
你能否使用你选择的编译器从命令行编译一个简单的C++测试应用程序?同时展示一下你手动添加的64位GCC编译器的细节会有所帮助。 - Kuba hasn't forgotten Monica
@KubaOber 最好使用编译输出窗格中的确切命令行。 - sashoalm
你尝试过在https://dev59.com/8lwZ5IYBdhLWcg3wVO1U#32410193上的解决方案吗? - sashoalm
相关问题:https://stackoverflow.com/q/62116070/11942268 - stackprotector
3个回答

14

我也有过这个问题,对我来说,我必须禁用ClangCodeModel插件。要做到这一点,我进入了帮助->关于插件...->取消选中C++类别下的ClangCodeModel。重启QT Creator后,一切正常工作。我在QT论坛上找到了这个解决方案。


6
谢谢。令人遗憾的是,新手必须去 Stack Overflow 才能让 "Hello world" 起作用。 - Steve Mitchell
在Ubuntu 22.04预装的Qt Creator 7.0上,似乎无法正常工作。 - rbaleksandar
我找到了相同的论坛帖子,来这里写下这个。为了让插件工作,添加包含路径并不适合在不同操作系统上工作的团队。 - nurettin

4
如果编译器在终端正常工作,那么它也应该可以在QtCreator中工作。因此,首先需要从终端让它正常工作。
从终端创建一个名为main.cpp的文件,其内容如下:
#include <cstddef>
int main()
{
    return 0;
}

然后输入以下命令:

gcc -H main.cpp -o main
  • 如果编译成功,可能是由于QtCreator中的kit定义存在问题。请确保stddef.h所在的文件夹位于您的kit包含文件列表中。但您不需要这样做。暂时,您可以将包含路径添加到您的项目中(请参阅如何在Qt Creator中添加包含路径? )来检查这是否真的是问题所在。然后,您需要找到一种方法来彻底解决kit问题。

  • 如果编译失败,请修复环境(可能要使用sashoalm的评论链接)。QtCreator只是一个IDE,如果您使用损坏的编译器运行它,它不会为您修复。编译输出将显示从哪里选择文件(cstddef然后是stddef.h)(-H选项)。尝试cpp -v以查看搜索包括文件的位置。

在我的机器上,编译输出给出:

. /usr/include/c++/4.8/cstddef .. /usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h ... /usr/include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h .... /usr/include/features.h ..... /usr/include/x86_64-linux-gnu/sys/cdefs.h ...... /usr/include/x86_64-linux-gnu/bits/wordsize.h ..... /usr/include/x86_64-linux-gnu/gnu/stubs.h ...... /usr/include/x86_64-linux-gnu/gnu/stubs-64.h ... /usr/include/x86_64-linux-gnu/c++/4.8/bits/cpu_defines.h .. /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h 多重包含 头文件保护可能有用:/usr/include/c++/4.8/cstddef /usr/include/x86_64-linux-gnu/bits/wordsize.h /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/x86_64-linux-gnu/gnu/stubs.h /usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h

可以看到stddef.h/usr/lib/gcc/x86_64-linux-gnu/4.8/include中被找到了。

cpp -v给出:

#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

注意:如果您手动创建了工具包,请先卸载QtCreator。让gcc能够从终端中使用,然后重新安装QtCreator。这样应该会自动创建工具包,并且它们应该可以正常使用。

0
这是一个我在所有版本的Fedora上经常遇到的QT的常见问题,问题是用户环境中缺少"/usr/lib64/qt5/bin"路径。
要在命令行检查路径是否存在,请输入以下内容:echo $PATH
如果你没有看到"/usr/lib64/qt5/bin"在响应中的任何地方列出,那么请按照以下步骤编辑你家目录下的.bashrc文件:-
添加QT5构建环境
if! [[ "$PATH" =~ "/usr/lib64/qt5/bin" ]]
then
  PATH="/usr/lib64/qt5/bin:$PATH"
fi

就在“export PATH”语句上方

更改生效后,您需要注销并重新登录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接