精华内容
下载资源
问答
  • clang -c -target arm-none-eabi -mcpu = cortex-m4 -O0 -mfloat-abi = hard -g main.c -o main.o ... clang-6.0 -c-目标arm-none-eabi -mcpu = cortex-m4 -O0 -mfloat-abi = hard -I / opt / gcc-arm-
  • 使用clang和gcc对内核修改及编译。

    千次阅读 2020-03-14 08:16:56
    大家好,欢迎观看我的文章,这次做了个终极版内核编译的视频教程,脚本在我的...2.使用tc-build构建clang gcc以及开启lld编译。 3.使用高通clang进行小米官方手机内核编译。 github地址: https://github.com/maozhi...

    大家好,欢迎观看我的文章,这次做了个终极版内核编译的视频教程,脚本在我的github上,或者进群下载。
    本脚主要融合(环境搭建全程无需梯子,快速搭建。):
    1.google的android专用gcc编译工具链。
    2.使用tc-build构建clang gcc以及开启lld编译。
    3.使用高通clang进行小米官方手机内核编译。
    github地址:
    https://github.com/maozhifeng/clang_and_gcc_auto_make_kernel

    展开全文
  • linux下Clang和gcc的区别

    千次阅读 2019-06-21 15:00:05
    ClangGCC 编译器的优势:编译速度更快编译产出更小出错提示更友好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它“认为”正确的方式...

    640?wx_fmt=png


    Clang 比 GCC 编译器的优势:

    编译速度更快

    编译产出更小

    出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 。

    内置有静态分析工具,可以对代码进行静态分析 (clang—analyze) 。这也是 gcc 做不到的 。

    专注,因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成。所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事。这种结构也使 clang 可以被单独拿出来用在其他的程序里,成为其它 app (主要是 IDE)的内嵌 C/C++ parser 。 对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的, clang正好充当了这一角色。 这样, editor 工具可以使用和 compiler 一样的 parser 来完成 edit-time 的语法检查 。 而 gcc 就没法很方便地做到这一点 。由于历史原因, GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。

     Gcc 的优势:

    ·         一些软件用 clang 编译会出现莫名其妙的错误,但是用 gcc 编译可以通过 。

    ·         GCC 在 5.0 之前一直都在准备用 C++ 实现模块化,期待 GCC 的 5.0 会有所突破,补上无法模块化的短板。

     


     

    编译速度更快、编译产出更小、出错提示更友好。尤其是在比较极端的情况下。

    两年多前曾经写过一个Scheme解释器,词法分析和语法解析部分大约2000行,用的是Boost.Spirit——一个重度依赖C++模版元编程的框架。当时用g++ 4.2编译的情况是:

    1. 编译速度极慢:完整编译一次需要20分钟

    2. 编译过程中内存消耗极大:单个g++实例内存峰值消耗超过1G

    3. 中间产出物极大:编译出的所有.o文件加在一起大约1~2G,debug链接产物超过200M

    4. 编译错误极其难以理解:编译错误经常长达几十K,基本不可读,最要命的是编译错误经常会长到被g++截断,看不到真正出错的位置,基本上只能靠裸看代码来调试

    这里先不论我使用Spirit的方式是不是有问题,或者Spirit框架自身的问题。我当时因为实在忍受不了g++,转而尝试clang。当时用的是clang 2.8,刚刚可以完整编译Boost,效果让我很满意:

    1. 编译速度有显著提升,记得大约是g++的1/3或1/4

    2. 编译过程中的内存消耗差别好像不大

    3. 中间产出物及最终链接产物,记得也是g++的1/3或1/4

    4. 相较于g++,编译错误可读性有所飞跃,至少不会出现编译错误过长被截断的问题了

    当时最大的缺点是clang编译出的可执行文件无法用gdb调试,需要用调试器的时候还得用g++再编译一遍。不过这个问题后来解决了,我不知道是clang支持了gdb还是gdb支持了clang。至少我当前在Ubuntu下用clang 3.0编译出的二进制文件已经可以顺利用gdb调试了。

    最后一点,其他同学也有讲到,就是Clang采用的是BSD协议。这是苹果资助LLVM、FreeBSD淘汰GCC换用Clang的一个重要原因。

     


     

    Clang vs GCC (GNU Compiler Collection)

    Pro's of GCC vs clang:

    • GCC supports languages that clang does not aim to, such as Java, Ada, FORTRAN, Go, etc.

    • GCC supports more targets than LLVM.

    • GCC supports many language extensions, some of which are not implemented by Clang. For instance, in C mode, GCC supports nested functions and has an extension allowing VLAs in structs.

    Pro's of clang vs GCC:

    • The Clang ASTs and design are intended to be easily understandable by anyone who is familiar with the languages involved and who has a basic understanding of how a compiler works. GCC has a very old codebase which presents a steep learning curve to new developers.

    • Clang is designed as an API from its inception, allowing it to be reused by source analysis tools, refactoring, IDEs (etc) as well as for code generation. GCC is built as a monolithic static compiler, which makes it extremely difficult to use as an API and integrate into other tools. Further, its historic design and current policy makes it difficult to decouple the front-end from the rest of the compiler.

    • Various GCC design decisions make it very difficult to reuse: its build system is difficult to modify, you can't link multiple targets into one binary, you can't link multiple front-ends into one binary, it uses a custom garbage collector, uses global variables extensively, is not reentrant or multi-threadable, etc. Clang has none of these problems.

    • Clang does not implicitly simplify code as it parses it like GCC does. Doing so causes many problems for source analysis tools: as one simple example, if you write "x-x" in your source code, the GCC AST will contain "0", with no mention of 'x'. This is extremely bad for a refactoring tool that wants to rename 'x'.

    • Clang can serialize its AST out to disk and read it back into another program, which is useful for whole program analysis. GCC does not have this. GCC's PCH mechanism (which is just a dump of the compiler memory image) is related, but is architecturally only able to read the dump back into the exact same executable as the one that produced it (it is not a structured format).

    • Clang is much faster and uses far less memory than GCC.

    • Clang has been designed from the start to provide extremely clear and concise diagnostics (error and warning messages), and includes support for expressive diagnostics. Modern versions of GCC have made significant advances in this area, incorporating various Clang features such as preserving typedefs in diagnostics and showing macro expansions, but GCC is still catching up.

    • GCC is licensed under the GPL license. clang uses a BSD license, which allows it to be embedded in software that is not GPL-licensed.

    • Clang inherits a number of features from its use of LLVM as a backend, including support for a bytecode representation for intermediate code, pluggable optimizers, link-time optimization support, Just-In-Time compilation, ability to link in multiple code generators, etc.

    • Clang's support for C++ is more compliant than GCC's in many ways.

    • Clang supports many language extensions, some of which are not implemented by GCC. For instance, Clang provides attributes for checking thread safety and extended vector types.


    来源:https://www.cnblogs.com/zlcxbb/p/5759755.html



    查看我们精华技术文章请移步:

    Linux阅码场原创精华文章汇总

    扫描二维码关注"Linux阅码场"

    640?wx_fmt=png

    展开全文
  • clangGCC 的区别

    千次阅读 2021-11-18 11:41:03
    一、clang 介绍 1.1 概述 Clang 是一个 C 语言、C++、Objective-C 语言的轻量级编译器。源代码发布于 BSD 协议下。Clang 将支持其普通 lambda 表达式、返回类型的简化处理以及更好的处理 constexpr 关键字。 ...

    一、clang 介绍

    1.1 概述

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

            Clang 是一个由 Apple 主导编写,基于 LLVM 的 C/C++/Objective-C 编译器

            2013 年 4 月,Clang 已经全面支持 C++11 标准,并开始实现 C++1y 特性(也就是 C++14,这是 C++ 的下一个小更新版本)。Clang 将支持其普通 lambda 表达式、返回类型的简化处理以及更好的处理 constexpr 关键字。

            Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective-C/Objective-C++ 编译器。它与 GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性,比如 C 函数重载(通过__attribute__((overloadable))来修饰函数),其目标(之一)就是超越 GCC。

    BSD :

    BSD_百度百科

    lambda 表达式:Lambda表达式_百度百科

    LLVML: LLVM_百度百科

    1.2 特点

    1. 终端用户特色:

             快速编译和较少内存占用 ;有诊断功能;兼容 GCC;

    2. 实用工具和应用:

            基础架构模块库;可满足多样的客户需求(代码重构,动态分析,代码生成,等);允许集成到各种IDE中;使用LLVM 'BSD' 协议;

    3. 内部设计与实现:

            一个不可移植的代码库;一个为C语言、Objective-C、C++、Objective-C++设计的非通用(Non general-purpose)的语法解析器;与C/C++/Objective-C及它们的衍生语言具有高度一致性;

    二、gcc 介绍

    1.1 概述

            GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言译器。GNU 编译器套件包括 C、C++、 Objective-C、 Fortran、Java、Ada 和 Go 语言前端,也包括了这些语言的库(如libstdc++,libgcj 等。)

            GCC 的初衷是为 GNU 操作系统专门编写的一款编译器。GNU 系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

    三、clang 比 gcc 编译器的优势

    3. 1 clang 的优势

    1. 编译速度更快

    2. 编译产出更小

    3. 出错提示更友好

             比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 。

    4. 内置有静态分析工具,

            可以对代码进行静态分析 (clang—analyze) 。这也是 gcc 做不到的 。

    5. 专注

            因为 clang 只需要完成词法和语法分析,代码优化和机器代码的生成工作由 llvm 完成。所以和全部由自己包下的 gcc 比起来, clang 可以更专注地做好一件事。这种结构也使 clang 可以被单独拿出来用在其他的程序里,成为其它 app (主要是 IDE)的内嵌 C/C++ parser 。 对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的, clang正好充当了这一角色。 这样, editor 工具可以使用和 compiler 一样的 parser 来完成 edit-time 的语法检查 。 而 gcc 就没法很方便地做到这一点 。由于历史原因, GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。

     3.2 Gcc 的优势

    1. 一些软件用 clang 编译会出现莫名其妙的错误,但是用 gcc 编译可以通过 。

    2. GCC 在 5.0 之前一直都在准备用 C++ 实现模块化,期待 GCC 的 5.0 会有所突破,补上无法模块化的短板。

    展开全文
  • 测试平台:ubuntu 12.04.4 64bit 硬件都是一样的哈! 首先安装:gcc(也许系统自带,也许没有,暂时不管) ...可以看出clang的报错精确程度确实比gcc高些 所以;life is short ,use clang

    测试平台:ubuntu 12.04.4 64bit

    硬件都是一样的哈!

    首先安装:gcc(也许系统自带,也许没有,暂时不管)

    sudo apt-get install build_essential


    然后再安装clang

    sudo apt-get install clang-3.3 clang-3.3-doc

    用vim编辑测试代码:

    (推荐一篇vim+completeme的配置文章,猛击这里:)

    (肯定是有问题的哈)

    #include<stdio.h>
    int main()
        {
          int hello=12;
          if(hell==12)
          {
             printf("hello is %d",hello);
          }
          else if(hel==12)
         {
           printf("hello world!")
         }
            return 0;
     }
    
    來看看两个报错情况:

    首先是clang

    hello.c:5:5: error: use of undeclared identifier 'hell'; did you mean 'hello'?
            if(hell==12)
               ^~~~
               hello
    hello.c:4:6: note: 'hello' declared here
            int hello=12;
                ^
    hello.c:9:10: error: use of undeclared identifier 'hel'
            else if(hel==12)
                    ^
    hello.c:11:25: error: expected ';' after expression
                    printf("hello world!")
                                          ^
                                          ;
    3 errors generated.


    然后是gcc的

    hello.c: 在函数‘main’中:
    hello.c:5:5: 错误: ‘hell’未声明(在此函数内第一次使用)
    hello.c:5:5: 附注: 每个未声明的标识符在其出现的函数内只报告一次
    hello.c:9:10: 错误: ‘hel’未声明(在此函数内第一次使用)
    hello.c:12:2: 错误: expected ‘;’ before ‘}’ token


    可以看出clang的报错精确程度确实比gcc高些

    所以;life is short ,use clang

    展开全文
  • 在了解LLVM和Clang之前,先得了解一下什么是编译器。 编译器是一种计算机程序,它将某种编程语言(高级编程语言)写成的源代码转换成另一种编程语言(低级编程语言)。一个现代编译器的主要工作流程为:源代码->...
  • MacOS 切换 ClangGCC

    千次阅读 2019-03-12 10:27:42
    macos 中虽然有 gcc 命令,但确实链接的 clang 编译器,可以通过 gcc --version 验证,我们自己下载 gcc 后,就可以通过 gcc-x 来使用(x 为 gcc 版本),通过设置 gcc-x 的别名为 gcc 即可达到曲线救国的效果。...
  • 什么是GCC和clang

    2021-04-18 09:02:24
    GCC ,gcc 和g++: GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C等语言。 gcc是GCC中的GUN C Compiler(C 编译器) ...gcc和g++的主要区别 对于
  • clang代替gcc

    千次阅读 2018-06-28 15:43:00
    gcc/g++ clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大...
  • 编译器GCCClang的异同

    万次阅读 多人点赞 2018-02-04 13:24:19
    编译器GCCClang的异同
  • GCC与LLVM-Clang的关系、区别

    千次阅读 2020-07-14 08:36:09
    gccGCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。...llvm-clang: llvm(Low Level Virtual Machine)APPLE
  • gccclang 对比

    万次阅读 2018-04-17 19:15:35
    浪费了好久时间, 然而gcc居然没有任何警告提示 于是乎上网搜索发现 有一款编译器 clang, 据说十分好用 就yum安装试了试 等我用它编译代码的时候, 便有一种相见恨晚的感觉 安装 yum list | grep clang ...
  • clang和gcc消除警告

    2019-10-04 13:31:10
    clang命令,它的作用是用来消除特定区域的clang的编译警告,-Wgnu则是消除?:警告, 例: #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu" //消除警告代码 #pragma clang diagnostic ...
  • ClangGCC 编译器的简单比较

    千次阅读 2014-03-29 17:47:13
    主要整理自知乎上的一个关于clanggcc优势的讨论.
  • GCCClang的异同

    2019-09-02 14:11:05
    GCC,LLVM,Clang编译器对比(很全,很重要!) GCC:GNU(Gnu's Not Unix)编译器套装(GNU Compiler Collection,GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是...
  • Clang vs GCC

    2018-01-16 19:32:38
    Clang vs GCC (GNU Compiler Collection) Pro's of GCC vs clang: GCC supports languages that clang does not aim to, such as Java, Ada, FORTRAN, Go, etc. GCC supports more targets than LLVM. GCC support
  • 下面的图表是对1万个整数进行排序的耗时比较,C++Java算法代码几乎完全一致,C++编译器使用了GCCclang和VC++14.25(VS2019)。 比较的算法有:冒泡排序,鸡尾酒排序,插入排序,二分插入排序,希尔排序,快速排序...
  • 转载https://oldpan.me/archives/gcc-make-cmake-clang-tell
  • 编译器Clang会代替GCC吗?

    千次阅读 2020-03-01 22:22:52
    关注、星标公众号,不错过精彩内容来源:网络整理:strongerHuangClang是一个C语言、C++、Objective-C语言的轻量级编译器,遵循BSD协议。Clang编译速度快、...
  • clang编译的ncnn在小核大核上都有肉眼可见的优势。特别是小核上,能优化的大核差不多。大核上优化空间反而比较小。这点很神奇。 个别模型clang上会差一点。 综合来说,用clang不亏。 树莓派的性能在这里...
  • 不同版本的ClangGCC和MSVC的编译选项。 提供了生成器和不同的文件格式(构建系统和编译器)。 所述output目录包含文件cmake , xmake , premake5 , meson , bjam / b2 , scons和命令行选项gcc / g++ , clang...
  • GCC/Clang/C++各编译器版本优势对比

    万次阅读 2018-06-26 10:26:18
    clang-4.0.1和GCC-7.1似乎做的很不错。 GCC GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键...
  • 利用clang和gcc进行宏的研究

    千次阅读 2014-08-31 11:17:15
    $:gcc -E main.m , 相同命令还有clang -E main.m , 以及clang -S main.m。 具体可以看help文档 转换后的效果代码如下:  NSInteger a = 5, b=7;  int maxValue = ((a)>(b) ? (a):(b));  NSLog...
  • macOS 下使用 gcc 而非 clang

    千次阅读 2019-06-14 17:46:29
    https://wwyqianqian.github.io/2019/05/06/real-gcc/ 今天编译一段带有#include <bits/stdc++.h>这样一个头文件的 c++ 代码时,遇到了报错 1 2 3 4 5 fatal...
  • 安装clang编译器默认的GCC

    千次阅读 2019-10-30 16:14:01
    gcc/g++ clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大...
  • Enable pretty-printing for gdb

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,146
精华内容 6,858
关键字:

clang和gcc