我已经构建了一个 github 包有一段时间了……一个新版本出来了,我构建了它。它使用我的 ubuntu 上默认的 clang6,ubuntu 18.04
现在,它无法编译,找不到标准的包含。在股票上,全新的 ubuntu 18.04 可以正常工作。所以我做了一些坏事。我正在使用基于 ubutntu hwe(所以 5.3)的自定义内核。我正在应用一个小补丁来恢复 intel i915 省电。
我可以简化问题:
$ more test.cc
#include <vector>
Run Code Online (Sandbox Code Playgroud)
当我这样做时它有效:
clang -c test.cc -v -stdlib=libc++
Run Code Online (Sandbox Code Playgroud)
此外,在 18.04.4 的股票上,它在我 apt 安装 clang 后工作。
但是在我的笔记本电脑上,它失败了:
clang -c test.cc -v
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Selected multilib: .;@m64
"/usr/lib/llvm-6.0/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name test.cc -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -v -coverage-notes-file /home/tim/test.gcno -resource-dir /usr/lib/llvm-6.0/lib/clang/6.0.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++ -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/x86_64-linux-gnu -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/backward -internal-isystem /usr/include/clang/6.0.0/include/ -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-6.0/lib/clang/6.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /home/tim -ferror-limit 19 -fmessage-length 232 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o test.o -x c++ test.cc
clang -cc1 version 6.0.0 based upon LLVM 6.0.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/backward"
ignoring nonexistent directory "/include"
ignoring duplicate directory "/usr/include/clang/6.0.0/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++
/usr/include/clang/6.0.0/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
test.cc:1:10: fatal error: 'vector' file not found
#include <vector>
^~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
更新:我发现这篇文章:https : //stackoverflow.com/a/54926827/401226 上面 说要查看这里的最高版本号:/usr/lib/ 在我的笔记本电脑上,它是版本 9。确实,我有版本9 gcc 安装,但我没有 v9 stdlib (libstdc++-9-dev)。
我没有安装 g++-9。
这是我学到的:
默认情况下,clang 会查找 gcc 标准 C++ 库,如果这不起作用,它就会停止。
它寻找最高版本。最高版本由安装的gcc 的最高版本决定。因此,如果您没有安装与您的最高 gcc 版本匹配的 g++,clang 在第一次找不到 libstdc++ 时就会放弃。
所以我有 gcc- 但我没有 g++-9。
apt install g++-9
Run Code Online (Sandbox Code Playgroud)
在安装匹配的 libstdc++-9.dev 时修复了问题
| 归档时间: |
|
| 查看次数: |
3639 次 |
| 最近记录: |