g++编译器的使用

关于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" 指令。

时间: 2024-10-13 17:57:36

g++编译器的使用的相关文章

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

一,GNU GNU是"GNU 's Not Unix"的递归缩写, Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同) 为保证GNU软件可以自由地"使用.复制.修改和发布",所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL).这个就是被称为"反版权&q

linux下的g++编译器安装

再debian下直接apt-get install gcc g++就能够了.依照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 查了一下,原来这个包的名字叫做gcc-c++.完整的应该是yum install gcc gcc-c++. 注意安装时要先成为root用户.详细的在终端输入su之后会提示输入管理员password,输入之后在终端输入命令行yum install gcc gcc-c++就好了,依照提示一步一步的安装就能够了. linux下的g+

Linux之gcc与g++编译器

1.gcc编译器 gcc编译器开发初期定位为C编译器(GNU C Compiler),但随着时间的发展gcc编译器能够支持多种语言. 1.1 gcc编译器的使用 假如我们已经有了.c文件名称为Hello.c,可以使用下面的语句编译该文件: $ gcc Hello.c 该语句执行成功后,会在当前目录下生成可执行文件名称为a.out(默认),我们可以使用下面的语句来运行该可执行文件: $ ./a.out 当然我们不想使用默认的名称,这样不够直观,我们可以在使用gcc进行编译时指定其可执行文件名: $

Linux运行c++程序gcc编译器和g++编译器的区别

gcc编译器和g++编译器在编译时都要经过这三个步骤:1.预处理生成.i文件 2.预处理后转换为汇编生成.s文件 3.汇编转化为机器码生成可执行的.o文件 4.连接生成可执行文件 但是在gcc编译器中,是不能直接连接c++库的,所以在链接过程中会出错,只要在链接命令后面加上一个"-lstdc++"即可实现.. gcc和g++都可以编译c和c++代码,.c文件g++会把其当做c++文件,而.cpp文件,两者都会识别为c++文件,编译阶段g++会调用gcc.但是gcc不能和c++程序的库相

windows环境下gcc/g++ 编译器 乱码问题解决

gcc /g++编译器在Windows 环境下会出现各种奇怪的问题, 内存分配,数组溢出处理,中文乱码,和vs的clang编译器有很大差距 -fexec-charset=charset,此选项指定窄字符或窄字符串的字面值常量的内部编码方式,默认为UTF-8.例如指定此选项为GBK,则窄字符或窄字符串常量将会以GBK编码方式存储而不是默认的UTF-8编码方式. 原文地址:https://www.cnblogs.com/wangyv/p/12602489.html

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

算法竞赛使用的在线判题平台在FAQ会给出提交的代码是通过什么指令进行编译的.比如hustoj给出的c++编译指令通常是: C++: g++ Main.cc -o Main -fno-asm -O2 -Wall -lm --static -DONLINE_JUDGE 这些看上去没有用的指令事实上的确有用.那么这些指令是什么意思呢? -o Main:这个是指出输出文件名的参数,此处文件名为Main.针对算法竞赛这个似乎没必要知道.. -fno-asm:这个的意思和字面(不让用汇编)差不都,也就是作用

Linux 升级g++编译器(已经亲自验证)

开始入住这里,纪念一下!Linux命令太多了!慢慢积累 原版本低,提示要求g++8.2.0以的编译器.参考原文(https://www.cnblogs.com/furzoom/p/7710163.html) 1,用wget从 http://mirrors.ustc.edu.cn/gnu/gcc/ 下载所需要版本g++ 命令:wget   (Linux下载文件命令) 格式:wget+空格+参数+文件路径  wget [OPTION]- [URL]- 例:wget http://mirrors.us

使用g++编译器扩大程序可用栈空间

如题,在写一些程序的时候我们有时会开一个比较大的数组或进行层数较多的dfs.这时候,程序常常会报错,于是就很无奈. 其实,虽然Windows给程序的默认栈空间比较小,我们还是有办法去扩大这个程序运行栈空间的. 栈空间限制在何处? 对于 Linux,在系统设置(本文不做讨论,后续可能会补坑) 对于 Windows,在 ".exe" 可执行文件中. Windows + g++ 扩大程序可用栈空间 方法 简单来说,就是在编译的时候加入一条形如 -Wl,--stack=SIZE 的指令即可.

升级 树莓派的gcc/g++编译器到4.8

首先,更新你的树莓派(避免编译出来版本不对导致不能insert)sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo rpi-update 更新gcc和g++: sudo apt-get install gcc-4.8 g++-4.8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20 sudo update-alt