clang代替gcc

因为需要研究的别人的代码里用到了clang++,所以在此记录一下。转载自:无求备斋笔记

 

gcc/g++ 和 clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大公司都在往上靠,前景一片光明。知乎上对几个主流编译器的评价:

(1)前景最好的应该是clang,错误提示/编译速度都是一流。另外现在有很多代码自动完成/提示工具是基于clang的。clang编译出的debug文件已经可以用gdb调试了哈,vs2015也内置了clang来提供对cross platfrom的支持。

(2)gcc/g++/msvc因为面向了具体的platform,所以老的项目里面可能用了他们自带的扩展/或者在彼此应用环境下有一些best practice,这个没有办法,还得接着用。。。

(3)Borland?还活着?

(4)ICC,据说经ICC编译后效率有提高,即使是AMD的U也是这样。。。我没试过。。。

对我自己而言,优先级是clang>g++>msvc。

 

OK,那么 clang 如何优秀呢,测试一下。测试平台 Ubuntu 15.04. 安装方法:

sudo apt-get install llvm
sudo apt-get install clang

切换默认 C++ 编译器:

sudo update-alternatives --config c++
There are 2 choices for the alternative c++ (providing /usr/bin/c++).

Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/g++       20        auto mode
1            /usr/bin/clang++   10        manual mode
2            /usr/bin/g++       20        manual mode

Press enter to keep the current choice[*], or type selection number: 1

对于 C 语言:

sudo update-alternatives --config cc

流程同 C++。

用拼写错误的变量名来测试一下 gcc 和 clang 的前端提示。

gcc 提示:

clang 提示:

仅仅在这个例子中,可以看到 clang 优于 gcc 的地方有

  1. 优美的颜色高亮。单色 gcc 看着真累。

  2. 智能的提示。clang 不仅告知有未定义变量,且知道可能是拼写出错,并提示可能的正确变量在哪。

  3. 更优异的大局观。本例子中拼写错误出现在 return 语句里,由于 return 语句编译出错,gcc 还抛出一个 non-void function 可能缺少 return 语句的 warning (明明我的 return 语句已经写在那里了)。clang 则知道 return 语句在那里,不会抛出这个没有必要的 warning。

目前我使用 clang 碰到的问题是,编译使用 boost 库的项目,运行时直接 Segmentation Fault,g++ 则无此问题。现在我直接使用 C++ 11 的多线程 API,不用 boost,于是仍用 clang 愉快地玩耍。

<think>好的,用户之前问过如何在Linux安装C/C++环境,现在具体问Ubuntu系统安装Clang。我需要先确定Clang是什么,以及用户为什么需要安装它。Clang是LLVM的C/C++编译器,相比GCC可能有更好的错误提示和编译速度,适合某些项目或者开发者偏好。 用户可能已经按照之前的指导安装了GCC,现在想用Clang作为替代或补充。需要确认Ubuntu下的安装方法。记得不同版本的Ubuntu软件源里的Clang版本可能不同,是否需要特定版本? 步骤方面,先更新软件源,然后安装Clang包。Ubuntu通常用apt,所以用sudo apt install clang。但可能需要安装额外的组件,比如Clang++或者LLVM工具链。用户可能需要开发库,比如libstdc++,或者想用clang-tidy等工具,是否需要建议安装clang-tools或者llvm? 另外,安装后如何验证,clang --version检查版本。可能还需要配置系统默认编译器,但通常ClangGCC并存,用户可以通过update-alternatives来选择默认。或者用户可能只是临时使用,用clang命令代替gcc。 用户可能遇到的问题,比如找不到包,可能需要添加LLVM的官方源,尤其是如果需要最新版本的话。但默认情况下Ubuntu的仓库应该包含Clang。比如,Ubuntu 22.04可能默认有Clang-14或更早,而用户如果需要更新的版本,可能需要通过APT仓库添加,比如llvm的官方仓库。 是否需要提到安装libc++?或者默认使用GNU的libstdc++?可能用户不太清楚这些细节,可以建议一般安装clang即可,除非有特殊需求。 另外,用户可能想知道如何编译程序,用clangclang++,和GCC类似,所以可以给出示例命令,比如clang++ -o hello hello.cpp。可能还需要说明如何切换默认编译器,但可能属于进阶内容,用户可能暂时不需要。 总结回答步骤:更新软件包列表,安装clang,验证安装,可选工具,示例编译。可能需要注意不同Ubuntu版本的差异,但用户没有指定版本,所以按通用方法处理。 最后,是否需要提醒用户ClangGCC的区别,或者某些情况下可能需要特定编译器?比如某些软件可能依赖GCC,但用户现在可能只需要安装Clang,所以保持简洁,回答核心问题即可。</think>在Ubuntu系统中安装Clang编译器(LLVM工具链)的完整流程如下: ```bash # 1. 更新软件源 sudo apt update # 2. 安装基础包 sudo apt install clang # C语言编译器 sudo apt install clang++ # C++编译器 sudo apt install lldb # LLVM调试器 sudo apt install lld # LLVM链接器 # 3. 验证安装 clang --version clang++ --version ``` **扩展组件安装**(根据需要选择): ```bash # 开发工具链 sudo apt install clang-tools # clang-format/clang-tidy等工具 sudo apt install libc++-dev # LLVM标准库开发版 sudo apt install libc++abi-dev # ABI库 # 多版本管理(如需要特定版本) sudo apt install clang-15 # 安装指定版本 ``` **配置建议**: 1. 切换默认编译器: ```bash sudo update-alternatives --config c++ # 交互式选择编译器 ``` 2. 编译测试程序: ```cpp // test.cpp #include <iostream> int main() { std::cout << "Clang版本: " << __clang_version__ << std::endl; return 0; } ``` ```bash clang++ test.cpp -o test -stdlib=libc++ # 指定使用LLVM标准库 ./test ``` **版本管理方案**: ```bash # 添加LLVM官方仓库(获取最新版本) wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 16 # 安装LLVM 16工具链 # 安装后会生成以下命令 clang-16 # 指定版本编译器 scan-build-16 # 静态分析工具 ``` **环境变量配置**: ```bash # 在~/.bashrc中添加 export CC=/usr/bin/clang export CXX=/usr/bin/clang++ ``` **典型错误处理**: 1. 头文件缺失错误: ```bash sudo apt install libstdc++-12-dev # 安装GNU标准库 ``` 2. 链接器错误: ```bash # 编译时指定链接器 clang++ -fuse-ld=lld main.cpp ``` 通过上述步骤,您将获得完整的LLVM/Clang开发环境。与GCC相比,Clang的优势包括: - 更清晰的错误提示(如模板错误定位) - 更快的编译速度(增量编译优化) - 集成静态分析工具(clang-tidy) - 支持C++最新标准特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值