clang和llvm环境搭建及使用详解

MAC上安装LLVM+Clang MAC上安装LLVM+Clang 折腾了一天的结果,感觉不把它写下来都对不住自己了,哭唧唧。 参考资料: - http://clang.llvm.org/get_started.html - http://blog.youkuaiyun.com/shuaiby/article/details/77621542 一、安装cmake (1)去cmake官网下载https://cmake.or 阅读详情
AI摘要

本文详细介绍了如何在Ubuntu 20.04 WSL2环境下,从源码编译LLVM+Clang,并针对远古系统如CentOS7提供了GCC升级及LLVM编译的步骤。内容涵盖了编译参数解析、编译加速技巧以及使用LLVM+Clang工具链的注意事项,包括头文件路径、链接器选择和运行时库的差异。

最直接的方案是从LLVM-project的Github Release页面上下载编译好的二进制包,我的环境是ubuntu-20.04 WSL2,因此可以直接开箱即用。如果是远古系统,例如CentOS7之类的,需要先编译一套GCC-11.2工具链,然后再通过GCC工具链编译LLVM+Clang;

编译llvm+clang

(系统自带GCC版本>5的情况)

cmake -H. -Bbuild_release -DCMAKE_BUILD_TYPE=Release \
-G "Ninja" \
-DLLVM_USE_LINKER="gold" \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" \
-DLLVM_ENABLE_RUNTIMES="libc;compiler-rt;libcxx;libcxxabi;libunwind"

参数解释

  • -H.:表示从当前目录.获取CMakeLists.txt;
  • -Bbuild:表示将构建文件输出到当前目录下的./build_release目录,如无则新建目录;
  • -DCMAKE_BUILD_TYPE=Release:采用Release方式编译,好处在于编译产物体积较小;
  • -G "Ninja":采用ninja作为构建工具,好处是能够利用多核多CPU加快编译速度,坏处是内存消耗较大;
  • -DLLVM_USE_LINKER="gold":采用gnu-gold作为连接器,好处是比普通的gnu-ld速度快,内存开销小;
  • -DLLVM_TARGETS_TO_BUILD="X86":只编译目标平台X86,可以减少编译所需的时间(根据实际目标平台决定);
  • -DLLVM_ENABLE_PROJECTS:编译项目列表
    • clang:编译器前端,以及一些相关的编译器前端工具集;
    • clang-tools-extra:额外的clang工具,如:clangd,clang-format等;
    • lld:LLVM的链接器,链接速度贼快,LLVM+CLANG工具集必选;
    • lldb:LLVM项目的调试器,作用和GDB一样;
  • -DLLVM_ENABLE_RUNTIMES:编译的运行时列表:
    • libc:LLVM后端的libc运行时库;
    • compiler-rt:LLVM后端的编译器运行时库;
    • libcxx:作为libstdc++的替代,LLVM后端的C++运行时库;
    • libcxxabi:LLVM后端的C++二级制接口运行时库;
    • libunwind:LLVM后端的栈回滚库,主要是用于获取程序的调用栈和异常处理和跳转需要;

如果是远古操作系统,编译的命令参考如下(GCC-11.2编译可以参考我之前的文章Ubuntu20.04 LTS 安装GCC11.2教程,包教包会!):

# 注意 TOOL变量代表了GCC-11.2安装的目录 根据实际情况自行设置环境变量
export CC=$TOOL/bin/gcc 
export CXX=$TOOL/bin/g++ 
cmake -H. -Bbuild_release -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$TOOL/lib64 -L$TOOL/lib64 -L/usr/local/lib" \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" \
-DLLVM_ENABLE_RUNTIMES="libc;compiler-rt;libcxx;libcxxabi;libunwind" \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1 \
-G "Ninja"

最重要的的两个参数,是传递给CMake的:

  • -DCMAKE_CXX_LINK_FLAGS:在编译clang+llvm时使用给定的rpath作为链接路径,如果不使用,默认链接的是远古CentOS自带的4.8.5版本GNU工具链,它是不满足llvm项目的编译要求的;
  • -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1:允许在安装时导入编译期链接阶段的rpath路径,不需要在安装后手动指定$LD_LIBRARY_PATH路径,安装好的clang+llvm运行时自动会查找编译时的rpath路径,也就是上面传递的-Wl,-rpath,$TOOL/lib64的位置(即GCC-11.2运行时的安装位置,可以通过readelf -d executable |grep RPATH验证,这里就不多说明了)

使用clang+llvm工具链的详细说明

直接安装二进制包的情况下,使用clang filename编译文件会发生链接错误,因为找不到对应的头文件;需要使用-lstdc++指定本机的gnu工具集后端,才能正常编译;如果要完全采用LLVM+Clang工具链编译,需要使用:

clang filename.cc --stdlib=libc++ -fuse-ld=lld -lc++

我们可以比较一下两种方式的-v输出内容(左为clang+gnu,右为clang+llvm):
在这里插入图片描述

  1. 使用-lstdc++编译的时候,注意序号1处的差异;可以看出,此时编译的后端采用的还是GNU工具集,尤其重点是:

    • 左边引入的C++头文件来自/usr/lib/gcc/X86_64-linux-gnu/10/../../../../include/c++/10下面;这个位置实际上就是/usr/include/c++/10,也就是系统自带的GNU工具链的C++头文件所在地;
    • 右边引入的C++头文件来自/usr/local/llvm-13.0.1/bin/../include/c++/v1;这个地方正是我们安装LLVM+Clang工具链所在的位置;
  2. 在第2处差异,可以明显看出include <...> search查找头文件的路径发生了区别,在1中已经描述过了;

  3. 在第3处差异,可以明显看到链接器的区别,左为/usr/bin/ld,右为/usr/local/bin/ld.lld(注意,这里我在/usr/local/bin下建立了ld.lld的软连接,默认是没有的);同时,链接过程载入的运行时库也是完全不同的,左边载入的是GNU的libstdc++,右边载入的是LLVM的libc++;

Clang Static Analyzer 系列(一)编译 Clang 及运行 Checker Clang Static Analyzer 实践系列(一),包含如何编译 Clang 、打印 AST CFG CallGraph ExplodedGraph 等信息以及运行 Checker 检查代码。 阅读详情

相关推荐

Linux环境下LLVM + clang安装

一.get LLVM源码 GitHub链接:llvm-project 下载llvm、clang文件夹;(非必需:compiler-rt、clang-tools-extra) 二.移动文件夹 将clang目录移动到 llvm/tools/目录下; 将compiler-rt移动到 llvm/projects目录下; clang-tools-extra移动到 llvm/tools/clang/tools目录下。 完成之后的目录如下: // 文件目录 llvm tools clang tools

Vin_tt的博客 8371

clang&llvm简介

翻译了LLVM和Clang官网首页部分信息,以初步了解这两个工具。 陈述了LLVM和Clang两者之间的联系(关系)。 使用实例简单演示了Clang(和LLVM)的使用。 最后在附录中给出了Clang相关工具的官网链接、两篇推荐阅读的blog,两篇关于Clang的中文论文。

大草的博客 7576

基于Clang/LLVM构建自定义C++静态分析工具:从原理到实践

静态分析是一种在不运行程序的情况下,通过分析源代码或中间表示来发现潜在错误、安全漏洞和代码风格问题的技术。其核心原理是通过解析代码生成抽象语法树(AST),并基于预定义规则对AST进行遍历和模式匹配。这项技术的价值在于能在开发早期发现缺陷,提升代码质量和可维护性,降低后期调试成本。在C/C++开发中,静态分析广泛应用于编码规范检查、内存安全漏洞检测、并发问题分析等场景。通用工具如Clang-Tidy虽功能强大,但难以覆盖特定业务逻辑和定制规则。本文聚焦于利用Clang/LLVM的LibTooling库,从环

weixin_28841265的博客 313

【基础知识】LLVM与Clang简要介绍

转载自:https://www.jianshu.com/p/1367dad95445 仅作个人学习记录 什么是LLVM LLVM项目是模块化、可重用的编译器以及工具链技术的集合。 美国计算机协会 (ACM) 将其2012 年软件系统奖项颁给了LLVM,之前曾经获得此奖项的软件和技术包括:Java、Apache、 Mosaic、the World Wide Web、Smalltalk、UNIX、Eclipse等等 创始人:Chris Lattner,亦是Swift之父 趣闻:Chris Latter本来

All_In_gzx_cc的博客 5775

使用Clang+LLVM在Linux x86平台高效交叉编译ARM64应用

本文详细介绍了如何在Linux x86平台上使用Clang+LLVM工具链高效交叉编译ARM64应用。通过配置工具链、优化CMake设置以及解决常见问题,开发者可以显著提升编译速度和生成代码的性能。文章还提供了实际项目案例,展示如何为ARM64架构优化OpenSSL等关键软件。

weixin_30379531的博客 391

windows下LLVM(clang, libclang)的安装和配置

·准备 使用软件:Visual Studio 2017 环境:Windows10 语言:C++ ·Step1:安装VS2017 如果只是为了使用LLVM,只需勾选“使用C++的桌面开发”这一项和如图右侧“可选”里勾选的选项即可。“Windows 10 SDK”比较大,可以不选,节省空间。 此外,在使用libclang时,需要VS的命令行“适用于VS2017的x86本机工具命令提示”,装好VS即可...

weixin_46570816的博客 3万+

Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)

Windows C/C++ 开发者长期面临 MSVC 与 GCC/MinGW 的选择困境。本文提出使用 Clang/LLVM 工具链作为理想替代方案,通过 MSVC ABI 或 MinGW-w64 ABI 两种模式实现高效开发。文章详细解析了 Clang/LLVM 在 Windows 上的两种 ABI 兼容模式(MSVC 和 MinGW-w64),比较了各自的优缺点和适用场景。同时提供了基于 MSYS2 和 llvm-mingw 的两种安装方案,并演示如何在此基础上搭建 Rust 开发环境(含国内镜像加速)

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 485

什么事LLVM和Clang?Clang与GCC有什么区别?Clang如何使用?

这个问题主要讲Xcode编译器的认知,在学习iOS之前有必要学习一下Objective-C的编译环境。 在了解LLVM和Clang之前,先得了解一下什么是编译器。 编译器是一种计算机程序,它将某种编程语言(高级编程语言)写成的源代码转换成另一种编程语言(低级编程语言)。一个现代编译器的主要工作流程为:源代码->预处理器->编译器->目标代码->链接器->可执行程序...

Welcome~ 9724

详解三大编译器:gcc、llvm 和 clang

回顾 GCC 的历史,虽然它取得了巨大的成功,但开发 GCC 的初衷是提供一款免费的开源编译器,仅此而已。可后来随着 GCC 支持了越来越多的语言,GCC 架构的问题也逐渐暴露出来。但 GCC 到底有什么问题呢?LLVM 的优点也正是 GCC 的缺点。传统编译器工作的时候前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(Abstract Syntax Tree)。优化器对这一中间代码进行优化,试图使代码更高效。

usstmiracle的博客 4万+

vscode + llvm-clang 配置优化,函数精准跳转

本文介绍了如何在VSCode中配置LLVM+Clang实现精准函数跳转的方法。首先对比了VSCode自带的C/C++插件在大型项目中存在的跳转精度问题,然后介绍了Clang作为GCC替代品的优势。详细配置步骤包括:安装Clangd插件、下载LLVM工具链、禁用冲突的C/C++扩展、确保CMake编译生成compile_commands.json文件,最后通过重启语言服务器完成配置。文章通过动图展示了使用Clangd后精准跳转的效果,解决了多定义函数跳转和宏隔离代码识别问题,显著提升了大型项目的开发效率。

爱出名的狗腿子 3476

LLVM、Clang介绍与Visual Studio(VS)下的使用

写在前面 编译与链接 LLVM与Clang等 Visual Studio 下使用LLVM与Clang 写在前面 因项目需要,想在VS中检测内存越界,检索到了AddressSanitizer,然后发现了Clang,又进一步找到了LLVM。借此,总结一下查阅到的相关内容。 编译与链接 在正式开始之前,插播一段编译器和链接器。 编译器主要用于将源代码从高级语言翻译成低级语言...

日拱一卒 1万+

ubuntu20.04 安装clang(什么是llvm、什么是clang以及其和clang的关系)

clang是一个C语言、C++、Objective-C语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。

西京刀客 1万+

【编译器】- LLVM和Clang环境部署

在 Ubuntu 系统中,你可以通过修改 ~/.bashrc 文件来将 LLVM 的 bin 目录添加到 PATH 环境变量中,以及将 LLVM 的 lib 目录添加到 LD_LIBRARY_PATH 环境变量中。cmake -DLLVM_DIR=/home/zq/桌面/llvm-project/llvm/install/lib/cmake/llvm。首先将虚拟机关机,在虚拟机设置中,选择选项面板,选择共享文件夹,选择总是启用。将win下的共享文件夹加入的指定目录下:在/mnt目录下输入。

weixin_44064233的博客 1524

LLVM-Clang编译器安装和使用

LLVM不仅仅是一个编译器,同时提供了模块化的功能和库,用于编译器的开发和功能扩展。常规的一个编译器分为前端、优化器和后端,LLVM编译器也不例外,Clang就是属于一个编译器的前端部分,LLVM属于优化器和后端,当然LLVM也可以支持其他类型的前端,比如GCC前端编译器。 Clang的安装 apt安装 本文介绍到的LLVM-Clang就是使用Clang前端的LLVM编译器,一般情况下LLVM...

程序猿Ricky的日常干货 1万+

四、windows上配置llvm+clang环境

下载LLVM并安装。下载minGW-w64(

weixin_41080308的博客 2800

数字摄影与摄像中的图像信号处理器(ISP):流程与经典算法详解

图像信号处理器(Image Signal Processor, ISP)是现代数字成像系统(如智能手机、数码相机、网络摄像头等)中的核心组件,扮演着将图像传感器(如CMOS或CCD)捕获的原始光电信号转换为高质量、可供观看或进一步处理的数字图像的关键角色。在数字摄影和摄像的整个链路中,光线首先通过镜头(Lens)聚焦到图像传感器上,传感器将光信号转换为模拟电信号,随后经过模数转换(A/D转换)变为原始的数字图像信号。

qq_44682523的博客 3724

在Ubuntu中用CLion来管理LLVM/Clang工程

Ubuntu在clion中管理llvm/clang工程前言一、安装clion二、编译llvm/clang三、编译clang-extra-tools 前言 llvm作为一个大型的编译套件,各种类继承关系,函数调用等十分繁杂,在ubuntu下为了更好的,更方便的阅读llvm套件的源码,希望通过clion这个优秀的ide来管理这个工程。以下详细的记录了我在ubuntu18.04.1中安装clion和编译llvm/clang的步骤。对于初学者十分友好!!! 一、安装clion 二、编译llvm/clang 三、编译

qq_21746331的博客 5747

告别绕线!用Altium Designer从零设计一个PCB平面变压器(附3D模型)

本文详细介绍了如何使用Altium Designer从零设计一个PCB平面变压器,包括磁芯选型、电气参数计算、PCB设计实战技巧以及3D验证与生产输出。通过将绕组直接集成到PCB层中,配合嵌入式磁芯,实现了小型化、高功率密度的电源设计,适用于中低电流、高频应用场景。附3D模型,帮助读者快速掌握这一创新设计流程。

weixin_33716154的博客 442

Macos 安装Clang和LLVM过程记录

Macos 安装Clang和LLVM过程记录 文章目录Macos 安装Clang和LLVM过程记录安装Cmake安装homebrew安装doc安装svn下载LLVM下载Clang下载Clang相关安装包(可选)编译安装配置环境变量相关参考链接Clang安装相关其他安装相关一些Clang操作 安装Cmake 去cmake官网下载 cmake-3.10.1-Darwin-x86_64.dmg按提示安装即可。 -配置环境变量exportPATH=/Applications/CMake.app/Contents

SherlockSong的博客 7353

CMU动作捕捉数据集实战:从AMC文件到Python可视化的完整流程

本文提供了CMU动作捕捉数据集的完整实战指南,详细解析了AMC文件格式,并对比了MATLAB转换、Python原生解析及转换为BVH格式三种数据解析策略。重点介绍了如何构建Python数据处理与可视化管道,包括将数据转换为Pandas DataFrame、绘制时间序列与相关性热力图,以及实现3D骨架动画,帮助开发者高效利用这一经典动作捕获数据集进行运动分析与模型训练。

android的专栏 716

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+
上一篇: Ubuntu20.04 LTS 安装GCC11.2教程,包教包会!
下一篇: llvm和clang环境配置(续篇)
wbvalid
博客等级 码龄10年 35粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值