【Clang】Clang入门教程

【Clang】Clang入门教程

一、Clang简介

简单来说,Clang是一个编译器,目前用来编译C、C++、Objective-C语言

更进一步来说,Clang只是一个编译器前端,其将上述的C类语言编译成一种“汇编语言(中间语言)”。接着,通过LLVM(Low Level Virtual Machine)作为后端,将这种“汇编语言”编译成针对不同机器的二进制机器语言。

Clang是在类BSD许可证下发布,所以不必担心像GPL下发布的GCC那样,不能在商业软件中使用。

二、Clang/LLVM的特性

真正的自由!

Clang是在类BSD许可证下发布,所以不必担心像GPL下发布的GCC那样,不能在商业软件中使用。而GPL的“自由”,以我的观点,就是象牙塔里的“自由”。而真正推动社会进步的力量,其中很重要的一步是经济力量。虽然GPL没有禁止软件的商业用途,但是其强制开放源码的策略,让许多试图在部分闭源的软件中使用开源软件公司望而却步。

当然,这仅仅从商业上的软件重用的角度来看待问题的。在刺激和保障开源软件的连续性上,GPL的用途是不可磨灭的。

方面的学习
GCC的参与者众多,代码参差不齐,开发年限很长,因而庞大而臃肿,对于试图初学编译器相关知识的朋友来说,阅读GCC的源码会让人有点不知所措。而Clang却轻盈许多,代码简单易懂,占用内存小。

根据Apostolou Dimitrios于2011年7月5日在GCC开发邮件列表中GSOC-Student Roundup的邮件中所说的一段话:“对我来说,阅读GCC代码库已变得非常困难。事实上这是我唯一所知道的随着时间的流逝而变得越来越复杂的项目”(译自维基百科)

如果想学习编译器的相关知识,不妨尝试阅读Clang/LLVM的代码。

相比于 GCC,Clang 具有如下优点:(摘自结构化编译器前端 Clang 介绍)

  • 编译速度快:在某些平台上,Clang 的编译速度显著的快过 GCC。

  • 占用内存小:Clang 生成的 AST 所占用的内存是 GCC 的五分之一左右。

  • 模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。

  • 诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告。

  • 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。

  • 当前 Clang 还处在不断完善过程中,相比于 GCC, Clang 在以下方面还需要加强:

  • 支持更多语言:GCC 除了支持 C/C++/Objective-C, 还支持 Fortran/Pascal/Java/Ada/Go 和其他语言。Clang 目前支持的语言有 C/C++/Objective-C/Objective-C++。

  • 加强对 C++ 的支持:Clang 对 C++ 的支持依然落后于 GCC,Clang 还需要加强对 C++ 提供全方位支持。

  • 支持更多平台:GCC 流行的时间比较长,已经被广泛使用,对各种平台的支持也很完备。Clang 目前支持的平台有 Linux/Windows/Mac OS。
    另外,FreeBSD10计划以Clang来代替GCC。

三、Clang使用

    写好一个C语言的Hello World之后(文件名为test.c)。
#include <stdio.h>
 int main(int argc, char **argv)
 {
    printf("hello world\n");
    return 0;
 }

在对应的文件夹下(假设已经安装好Clang,Linux各个发行版安装Clang很简单的,目前我是在Linux下做的,关于Windows下Clang的编译安装,到时候我会写个教程),输入:

clang test.c

就可以编译出常见的a.out了,这时输入a.out就可以在终端显示出“Hello world了”。

四、最重要的一点

    撇开编译器上的常见用途。Clang的优势有:拥有清晰的错误提示;模块化设计,方便二次开发(非常重要);可与IDE完美结合!

目前就先写到这,有空我再补充。

参考链接:
http://blog.chinaunix.net/uid-26453158-id-3346274.html

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
eBPF(extended Berkeley Packet Filter)是一种在Linux内核中执行程序的技术,它可以用于网络分析、性能监控、安全审计等多种用途。下面是一个eBPF入门实践教程的大致步骤: 1. 确保你的系统支持eBPF:你需要一个运行Linux内核4.1或更高版本的机器,并且要启用eBPF功能。你可以通过运行`uname -r`命令来检查你的内核版本。 2. 安装所需的工具:你需要安装clang编译器、LLVM和libbpf库。这些工具可以帮助你编写和编译eBPF程序。你可以使用包管理器(如apt、yum等)来安装这些工具。 3. 学习eBPF原理:了解eBPF的基本概念和工作原理是很重要的。eBPF程序是一种在内核中执行的小型虚拟机程序,它可以通过钩子函数与内核交互并处理数据。 4. 编写eBPF程序:使用C语言编写eBPF程序,并使用clang编译器将其编译为eBPF字节码。eBPF程序可以通过BPF syscall加载到内核中。 5. 调试和测试:在运行eBPF程序之前,你可以使用bpftool和bpfsyscall等工具进行调试和测试。这些工具可以帮助你检查eBPF程序的正确性和性能。 6. 部署eBPF程序:一旦你的eBPF程序通过测试,你可以使用ip、tc等工具将其部署到实际的网络环境中。这些工具允许你在网络数据包到达内核之前或之后执行eBPF程序。 以上是一个简单的eBPF入门实践教程的大致步骤。在实际使用中,你可能会遇到更多的挑战和复杂性。但通过不断学习和实践,你将能够掌握eBPF技术并应用于各种场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值