给你一个网站你如何做优化,求一个2023年没封的,陈铭生我来找你了,自助餐团购网站建设ubuntu系统上的软件相比CentOS更新还是比较快的#xff0c;但是还是难免有一些软件更新得不那么快#xff0c;比如LLVM Clang编译器#xff0c;目前ubuntu 22.04版本最高还只能安装LLVM 15#xff0c;而LLVM 18 rc版本都出来了。参见https://github.com/llvm/llvm-project/…ubuntu系统上的软件相比CentOS更新还是比较快的但是还是难免有一些软件更新得不那么快比如LLVM Clang编译器目前ubuntu 22.04版本最高还只能安装LLVM 15而LLVM 18 rc版本都出来了。参见https://github.com/llvm/llvm-project/releases。
这里笔者就以最新稳定版本clangllvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz来说明如何使用LLVM官方发布的tar.xz文件来安装Clang编译器。
首先从前面的链接中下载安装包ubuntu安装llvm的默认路径是在/usr/lib/比如llvm-15就是安装在/usr/lib/llvm-15下的然后通过符号链接将必要文件链接到/usr/bin/和/usr/lib/以及其它目录下的。我们也遵循这样的规则。
sudo tar xvf clangllvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz
sudo mv clangllvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04 /usr/lib/llvm-17
sudo ln -s /usr/lib/llvm-17/bin/clang /usr/bin/clang -f
sudo ln -s /usr/lib/llvm-17/bin/clang /usr/bin/clang -f即可。
这里笔者以前文C 20 Module中的示例来使用clang 17编译并且使用libc库而不是stdlibc。
这里使用CMakePresets.json来配置CMake
{version: 3,configurePresets: [{name: linux-debug,displayName: Linux Debug,generator: Ninja,binaryDir: ${sourceDir}/out/build/${presetName},installDir: ${sourceDir}/out/install/${presetName},cacheVariables: {CMAKE_BUILD_TYPE: Debug,CMAKE_C_COMPILER: clang,CMAKE_CXX_COMPILER: clang},condition: {type: equals,lhs: ${hostSystemName},rhs: Linux},vendor: {microsoft.com/VisualStudioRemoteSettings/CMake/1.0: {sourceDir: $env{HOME}/.vs/$ms{projectDirName}}}}],buildPresets: [{name: linux-debug,displayName: linux-debug,description: 自定义生成预设说明,configurePreset: linux-debug,verbose: true,jobs: 8}]
}此时会报错
/usr/bin/../include/c/v1/stddef.h:17:15: fatal error: stddef.h file not found是找不到头文件可以使用下面的命令来看clang的头文件搜索路径
echo | clang -x c -v -E -如果使用了libc库则需要添加上使用
echo | clang -x c -v -E - -stdliblibc顺便说一下如果是GCC则为
echo | gcc -x c -v -E -从前面clang带libc库的输出可以看出并没有/usr/lib/gcc/x86_64-linux-gnu/11/include因为libc库有使用libstdc库的一些头文件。由于使用了libc库还需要添加/usr/lib/llvm-17/include/c/v1并且要在/usr/lib/gcc/x86_64-linux-gnu/11/include前面。
可能还会有找不到__config_site文件的情况该文件在/usr/lib/llvm-17/include/x86_64-unknown-linux-gnu/c/v1。
可以在CMakePresets.json中使用环境变量来设置 environment: {CPLUS_INCLUDE_PATH: /usr/lib/llvm-17/include/c/v1:/usr/lib/gcc/x86_64-linux-gnu/11/include:/usr/lib/llvm-17/include/x86_64-unknown-linux-gnu/c/v1}这样就可以正常使用新版本的clang编译器了如果还有找不到的文件也可以通过这样的方式添加路径。
编译器搜索路径有几个环境变量C_INCLUDE_PATH、CPLUS_INCLUDE_PATH以及CPATH。它们常被用于在编译C/C时的搜索头文件的路径其中C_INCLUDE_PATH仅对预处理C有效CPLUS_INCLUDE_PATH仅对预处理C有效而CPATH对C和C语言均有效。