在Ubuntu20.04上使用Qt Creator(4.11.0)時,程序運行起來沒問題,但編輯器會提示頭文件找不到,界面上提示各種錯誤。我以為是我的工程太過復雜,部分頭文件路徑設置錯誤,但是查了半天,沒有發現問題,google查了半天,也沒找到解決辦法。於是創建了一個很簡單的工程來測試,ro工程文件:
QT -= gui CONFIG += c++11 CONFIG -= app_bundle SOURCES += \ main.cpp
main.cpp文件:
#include <iostream> int main(int argc, char *argv[]) { std::cout << "hello world" << std::endl; return 0; }
這么簡單的文件,編譯、運行都沒有問題,偏偏提示找不到頭文件
Warning:The code model could not parse an included file,which might lead to incorrent code completion and hightlighting,for example. wchar.h:35:10: fatal error: 'stddef.h' file not found main.cpp:1:1: note: in file included from /home/xzc/Documents/code/qt_test/main.cpp:1: main.cpp:1:10: note: in file included from /home/xzc/Documents/code/qt_test/main.cpp:1: iostream:39:10: note: in file included from /usr/include/c++/9/iostream:39: ostream:38:10: note: in file included from /usr/include/c++/9/ostream:38: ios:38:10: note: in file included from /usr/include/c++/9/ios:38: iosfwd:40:10: note: in file included from /usr/include/c++/9/iosfwd:40: postypes.h:40:10: note: in file included from /usr/include/c++/9/bits/postypes.h:40: cwchar:44:10: note: in file included from /usr/include/c++/9/cwchar:44:
而且,wchar.h這個文件明明在 /usr/lib/gcc/x86_64-linux-gnu/9/include 里,沒有理由找不到,而且,我手動用G++、clang++編譯程序,都是沒有問題的,說明它們都認這個路徑,就是Qt Creator不認。更氣人的是,我手動include這個文件,它是找得到的,而且C++ Code Model Inspector也是認這個路徑的
這個提示是ClangCodeModel的,網上給出的解決辦法就是到 幫助->插件 那里把這個插件關掉,但是關掉之后,一些clang相關的功能也被關掉了,這不可接受啊。后來發現這些認不到的頭文件都是glibc的,大概是Qt Creator調用clang的時候,include參數沒設置好(或者是我沒設置好?),導致clang不認gcc的默認路徑,於是強制在pro工程文件里指定glibc的include路徑,問題解決:
INCLUDEPATH += /usr/lib/gcc/x86_64-linux-gnu/9/include
PS: 2021-05-03
根據https://bugreports.qt.io/browse/QTCREATORBUG-19667?attachmentOrder=desc,sudo apt install libclang-common-8-dev安裝libclang-common-8-dev即可解決。