编译器方面的几个命令

gcc/g++

一. 常用编译命令选项

常用用法
gcc -Wall test.c -o test

gcc编译过程

.c ->(-E)->
.i[中间文件] ->(-S)->
.s(汇编文件) ->(-c)->
.o[机器语言文件] ->

1. 无选项编译链接

> 用法: gcc test.c
> 作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o 第四步 链接(Linking)

> 用法: gcc test.c -o test
> 作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E 第一步 预处理(Pre-Processing)

> 用法: gcc -E test.c -o test.i
> 作用:将test.c预处理输出test.i文件。

4. 选项 -S 第二步 编译(Compiling)

> 用法: gcc -S test.i
> 作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c 第三步 汇编(Assembling)

> 用法: gcc -c test.s
> 作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接

> 用法: gcc test.o -o test
> 作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项 -O

> 用法: gcc -O1 test.c -o test
> 作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

1. 多个文件一起编译

> 用法:#gcc testfun.c test.c -o test
> 作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

> 用法:
> gcc -c testfun.c //将testfun.c编译成testfun.o
> gcc -c test.c //将test.c编译成test.o
> gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

clang

clang的编译选项大部分和gcc相同
clang --help
clang file.c -fsyntax-only (check for correctness)
clang file.c -S -emit-llvm -o - (print out unoptimized llvm code)
clang file.c -S -emit-llvm -o - -O3
clang file.c -S -O3 -o - (output native machine code) clang -### min.c -o min
-###参数是为了查看,clang driver到底调用了哪些命令,并且不会执行这些命令
词法分析:
clang -cc1 -dump-tokens min.c
语法分析:
clang -fsyntax-only -Xclang -ast-dump min.c 使用clang编译源文件,错误提示相较于C要人性化跟多,方便快速阅读查找定位。

Clang比 gcc/g++更人性化代码出错提示的C/C++编译器的更多相关文章

  1. 在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”

    (有一些图片我是直接从个人的CSDN博客上复制来的) 最近一个多月来,我曾经多次尝试在Ubuntu 16.04 LTS上使用g++和gcc(这俩好像合起来叫MinGW?)来编译C/C++代码,但是在解 ...

  2. linux下Clang和gcc的区别

    Clang 比 GCC 编译器的优势: 编译速度更快 编译产出更小 出错提示更友 好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 “ 认为 ” 正确的方式 . 内置有静态分析工具 ...

  3. (转)Clang 比 GCC 编译器好在哪里?

    编译速度更快.编译产出更小.出错提示更友好.尤其是在比较极端的情况下.两年多前曾经写过一个Scheme解释器,词法分析和语法解析部分大约2000行,用的是Boost.Spirit--一个重度依赖C++ ...

  4. gcc g++ 参数介绍

    C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...

  5. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...

  6. Linux gcc/g++下GDB调试及其调试脚本的使用

    GDB调试及其调试脚本的使用返回脚本百事通一.GDB调试 1.1. GDB 概述 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB ...

  7. 有关信息ACM/ICPC竞争环境GCC/G++叠插件研究记录的扩展

    0.起因 有时.DFS总是比BFS受人喜爱--毕竟DFS简单粗暴,更,而有些东西BFS不要启动,DFS它似乎是一个可行的选择-- 但是有一个问题,DFS默认直接写入到系统堆栈.系统堆栈和足够浅,此时O ...

  8. gcc/g++ 命令的经常使用选项

    gcc/g++ 命令的经常使用选项格式(选项 解释) -o FILE 指定输出文件名称.在编译为目标代码时,这一选项不是必须的.假设FILE没有指定,缺省文件名称是a.out. -c 仅仅编译生成目标 ...

  9. gcc/g++ 编译参数

    1, -E(大写),预处理 例子:gcc -E test.cpp -o test.i 预处理,把程序里的#开头的替换掉,比如#include,然后生成test.i 2,-P(大写),去掉预处理生成的杂 ...

随机推荐

  1. javaweb 中的路径问题汇总

    路径问题汇总  http://localhost/day10/AServlet     request.getRequestDispatcher("/AServlet") ==&g ...

  2. javascript删除数组某个元素

    1.首先可以给js的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引 Array.prototype.indexOf = function(val) { for (var i = 0; ...

  3. 我常用的find命令

    查找某种类型文件中包含特定字符的文件 find /* -type f -name "*.php" |xargs grep "rename(" find ./|x ...

  4. selenium+testng+ant+jenkins 手记

    会不会搭建测试平台是一般测试工程师和高级测试工程师分水岭 ----tobecrazy 我们项目有现成的测试平台,使用的是selenium grid+testng+ant+jenkins+VM 但是我平 ...

  5. python第14天

    Python之前端web: HTML CSS 一. 什么是HTML: html为超文本语言,使用标签来描述网页. html标签格式: HTML 标签是由尖括号包围的关键词,比如 <html> ...

  6. Gym - 101102C

    题目链接 #include <bits/stdc++.h> using namespace std; ; int data[maxn],last[maxn],ans; struct D { ...

  7. Memcached vs Redis

    Memcached和Redis哪一个能有更好的表现? Redis可以看作是Memcached的超集,这让Redis不仅仅可以用来当缓存,也可以作为实际的数据存储. 强大的数据结构以及操作命令. 默认持 ...

  8. Java(Helloworld.java)

    public class A{ public static void main(String args[]){ System.out.println("Hello world!") ...

  9. sublime-生成html1.0

    文件--新建--输入--html:xt--CTRL+E.生成html1.0

  10. Spring--通过注解来配置bean【转】

    Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpat ...