clang工具链搭建踩坑

Huan Lee Lv5

目标环境

  • VSCode + LunarVim
  • clang for compile
    • Clangd for intelligent coding
    • clang-format for document format
    • LLDB for debug

踩坑

  • 在编译命令后加 -v 可以看到具体的报错信息
  • libstdc++是gcc使用的C++标准库, 其中包括容器,io,算法,迭代器等, 而libc++是LLVM团队实现的, 需要单独安装(不会在安装clang时同时安装)
  • clang编译时, 如果不加入-stdlib=libc++, 则默认使用libstdc++, 即使用g++的标准实现
    • libc++是对c++标准库的实现,而libc++abi(application binary interface)提供内存管理,异常处理等底层支持。libc++依赖libc++abi或pathscale的libcxxrt或gcc的libsupcxx三者之一进行构建。

clang++无法找到头文件iostream

通过apt install clang++之后, 进行编译测试

clang main.cpp -o main报错: Clang++: fatal error: ‘iostream’ file not found

Locating iostream in Clang++: fatal error: ‘iostream’ file not found

根本原因: clang++在编译过程中, 需要使用g++中的头文件, 而具体使用的版本是通过gcc —version来确定的, 那么导致上诉错误的原因有两种:

  1. 本地未安装gcc或g++
  2. gcc 版本与g++版本不一致: gcc版本高于g++导致无法找到gcc对应版本的g++头文件

解决方法: 安装相同版本的gcc和g++, 保证gcc —version和g++ —version结果相同

  • 通过apt install新版gcc和g++, 到/usr/bin/中重新构建gcc和g++的软链接

clang编译过程中加入-stdlib=libc++报错

当使用-stdlib=libstdc++时编译正常, 但是=libc++时, 因为找不到头文件而编译失败了

  • sudo apt install libc++-14-dev
  • sudo apt install libc++abi-14-dev
  • 14为clang版本号

VSCode中完成配置

下载所需插件:

Untitled

Untitled

Untitled

编写tasks.json 和 launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"version": "2.0.0",
"tasks": [
{
"type": "process",
"label": "clang++ build",
"command": "/usr/bin/clang++",
"args": [
"-std=c++17", // C++标准(语法支持)
"-stdlib=libc++", // C++标准库
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"group": {
"kind": "build",
"isDefault": true
}
},
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"version": "0.2.0",
"configurations": [
{
"name": "clang debug", //名称随便取
"type": "lldb", //正在使用的调试器,使用Visual Studio Windows时必须为cppvsdbg,使用GDB或LLDB时必须为cppdbg; 此时使用codelldb因此type为lldb
"request": "launch", //表示此配置是用于启动程序还是附加到已运行的实例上
"program": "${fileDirname}/${fileBasenameNoExtension}", //要执行的可执行文件的完整路径
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}", //可执行程序完整路径(不包含程序名称)
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "clang++ build"
}
]
}

libc++abi介绍

c++编译工具链

LLVM的相关介绍,以及clang工具链安装教程

下次还是不要想当然直接apt下载了, 老老实实搜一搜了解一下, 会避免很多坑! 不过说到底还是自己对C++的编译过程太不了解…

  • Title: clang工具链搭建踩坑
  • Author: Huan Lee
  • Created at : 2023-04-08 10:00:00
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2023/04/08/clang工具链搭建踩坑/
  • License: This work is licensed under CC BY-NC-SA 4.0.