关于g++

g++  是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器。它是Unix 和 Linux  系统下标配的 基于命令行的 C++编译器。如果你的系统是Windows,可以按照下面的教程安装g++。

Windows下安装g++

一、下载minGW(适用于Windwow的GCC工具集合)
链接:http://pan.baidu.com/s/1eSceGCi                    (g++版本4.8.1,连接失效请回复提醒我下~)

密码:6fhh

二、解压到任何盘符。比如我解压到了E盘下的C++目录下

 
E:  
  |--C++
       --MinGW  
 
三、配置环境变量
 
 
 
 

g++ 的参数使用

 
--version
显示g++ 的版本 。
 
--target-help
显示特定平台环境的参数支持。比如嵌入式领域使用的avr-g++会对MCU 支持一些优化参数。
 
-std=<语言标准>
如:-std=c++11  ,使用C++11标准
 
 
-ansi
使用ANSI 标准,禁止GNU 标准特性,如 asm inline typeof 关键字,以及UNIX,vax等预处理宏。
 
 
 
-funsigned-char           #将程序中的char解析为unsigned char
-fno-signed-char         #将程序中的char解析为非signed char
-fsigned-char              #将程序中的char解析为signed char
-fno-unsigned-char    #将程序中的char解析为非unsigned char

你的编译器中,char类型是 signed char  还是  unsigned char?不太清楚。嗯,所以如果对范围敏感,应该明确定义unsigned char ,或者是 signed char 。上面4个参数就是指定g++将char解释为什么类型。

 
 
 
-O0 
-O1 
-O2 
-O3
取英文单词Optimize(意为:优化)的第一个字母O,不是零哦。
编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高。
优化的是什么呢?生成的程序的大小和程序的执行速度。
 
 
 
-w
编译时,不显示任何警告消息。
 
 
 
-Wall
编译时,显示所有出现的警告消息。
 
 
 
 
C/C++源代码的编译过程:
 
 
 
-o  <file> 
 
输出编译后的结果到指定的文件file中。windows下默认编译输出a.exe,而linux则默认是a.out。-o不仅可以指定输出的可执行文件,还可以指定中间文件的输出,后面会用。
 
g++ hello.cpp -o hello.exe          # 输出指定的可执行文件 hello.exe
g++ -o hello.exe hello.cpp          # 同上
 
g++ hello.cpp                       #windows下输出的是a.exe,linux下输出的是a.out
 
 
 
 
 -E
对源文件进行预处理,预处理后生成.i( 或者是 .ii)文件。通过此命令可以查看于处理器是如何“修改”我们的.cpp源文件的,以理解预处理的工作机制。生成的是文本文件。  
 
g++ -E -o hello.i hello.cpp           #对hello.cpp进行预处理生成hello.i文件
 
 
 
-S
只进行预处理和编译,编译是C++编译器的核心操作,其结果就是将C++代码中转译为汇编代码,生成.s汇编文件。生成的依然是文本文件。
 
g++ -S -o hello.s hello.cpp          #生成汇编文件hello.s
 
 
 
-c
只进行 预处理, 编译,汇编操作,生成.o (.obj)文件,不进行链接。生成的是二进制文件。
 
g++ -c -o hello.o hello.cpp
 
 
 
-save-temps
顾名思义,就是保留编译产生的中间文件,使用这个参数,就没必要将前面的参数 -E  -S  -c  一个一个地使用了。
 
 
» ls -l | grep ^- 
-rw-r--r-- 1 Luli None 689 Apr  3 14:12 cmd.cpp
 
» g++ -save-temps -o cmd.exe cmd.cpp                                                                      
» ls -l | grep ^-
 
-rw-r--r-- 1 Luli None    689 Apr  3 14:12 cmd.cpp
-rwxr-xr-x 1 Luli None  93106 Apr  3 14:33 cmd.exe
-rw-r--r-- 1 Luli None 444403 Apr  3 14:33 cmd.ii
-rw-r--r-- 1 Luli None   1562 Apr  3 14:33 cmd.o
-rw-r--r-- 1 Luli None   2501 Apr  3 14:33 cmd.s
 
 
 
 
-M , -MD
输出源文件的#include指令 ( #include<head_file> , #include"head_file" ) 引起的所有包含文件依赖。
 
举个栗子:
/*cmd.cpp*/
#include <cmath>
int main()
{ return 0;
}
 
使用-M参数的效果:
 
-M参数可以查看源文件实质上包含的所有头文件
» g++ -M cmd.cpp      
                                                                                   
cmd.o: cmd.cpp e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\cmath \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\os_defines.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\cpu_defines.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\cpp_type_traits.h \
 e:\c++\mingw\lib\gcc\mingw32\4.8.1\include\c++\ext\type_traits.h \
 e:\c++\mingw\include\math.h e:\c++\mingw\include\_mingw.h \
 e:\c++\mingw\include\sdkddkver.h
 
 
 
然后查看cmath 头文件中的所有#include 指令(蓝色部分是间接#include指令引起的,为了方便验证我写在一起了)
#include <bits/c++config.h>
     #include <bits/os_defines.h>
     #include <bits/cpu_defines.h>
 
#include <bits/cpp_type_traits.h>
 
#include <ext/type_traits.h>
 
#include <math.h>
     #include <_mingw.h>
           #include <sdkddkver.h>
 
-MD是将输出的结果保存到一个.d文件中
 
 
-MM , -MMD
同上,只不过,他不会考虑 #include<head_file> 指令,而只考虑 #include"head_file" 指令。
 
作者:lulipro-代码钢琴家 
出处:http://www.cnblogs.com/lulipro/ 
 

g++编译器的使用(转载)的更多相关文章

  1. ###g++编译器

    点击查看Evernote原文. #@author: gr #@date: 2014-07-20 #@email: forgerui@gmail.com 对g++编译器不是特别熟悉,希望借此熟悉一下. ...

  2. gcc/g++编译器的安装与说明

    gcc/g++编译器的安装与说明 1.gcc/g++编译器的安装 gcc yum install gcc g++ yum install gcc-c++ 2.gcc/g++的作用 将c/c++源代码编 ...

  3. Linux环境下GNU, GCC, G++编译器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012823258/article/details/36890125 一.GNU GNU是" ...

  4. 算法竞赛中G++编译器的编译指令简单说明

    算法竞赛使用的在线判题平台在FAQ会给出提交的代码是通过什么指令进行编译的.比如hustoj给出的c++编译指令通常是: C++: g++ Main.cc -o Main -fno-asm -O2 - ...

  5. 关于 g++ 编译器

    g++由自由软件基金发行,g++是基于类unix的c++编译器,通常在命令行运行.它一般附带于类Unix系统中,因此如果你正在运行Unix或Linux系统,它很可能已经存在于你的系统中.你可以对一个源 ...

  6. g++编译器的使用

    关于g++ g++  是GNU组织开发出的编译器软件集合(GCC)下的一个C++编译器.它是Unix 和 Linux  系统下标配的 基于命令行的 C++编译器.如果你的系统是Windows,可以按照 ...

  7. Linux环境下GNU, GCC, G++编译器(转)

    一,GNU GNU是“GNU 's Not Unix”的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new ...

  8. CentOS 7 升级gcc/g++编译器

    gcc的升级必须要使用源码进行升级,也就说,必须要使用源码进行编译才行.我的7.2的CentOS目前自带的gcc是4.8.5的,gcc从4.8之后开始支持C++11,但是鉴于现在C++14.C++17 ...

  9. GCC、g++编译器和gcc编译器的区别

    GCC:(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器.它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分. gcc:GNU的C语 ...

随机推荐

  1. android 开发AlertDialog.builder对话框的实现

    AndroidAPI提供了Dialog对话框控件,但google明确指出不建议开发者只是使用Dialog来创建对话框,而应该自定义对话框或者使用API中提供的Dialog的子类,如AlertDialo ...

  2. ASP.NET Core集成微信登录

    工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com ...

  3. SpringBoot2.0之三 优雅整合Spring Data JPA

      在我们的实际开发的过程中,无论多复杂的业务逻辑到达持久层都回归到了"增删改查"的基本操作,可能会存在关联多张表的复杂sql,但是对于单表的"增删改查"也是不 ...

  4. JAVA中面向对象

    一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符  返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...

  5. 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式

    一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...

  6. vue使用element-ui实现按需引入

    基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 Element Ui 基于vue pc端的UI框架 MintUi 基于vue 移动端的ui框架 http://element.ele ...

  7. 微信小程序:从本地相册选择图片或使用相机拍照。

    wx.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照. OBJECT参数说明: 示例代码: wx.chooseImage({ count: 1, // 默认9 sizeTyp ...

  8. JavaScript 创建对象的七种方式

    转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...

  9. 关于com工程依赖的一些总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 一是com组件工程的依赖设置.比如A这个组件工程要使用B组件工程的类,要如何设置呢?具体就是先把在A工程里加上B工程的 ...

  10. WPF学习二:TextBlock和Label的区别

    TextBlock和Label都是用来显示少量数据的.好多文章对Label存在的描述都是它允许使用"快速获取"."快速获取"就是允许你用Alt加上其它的按键快速 ...