g++tiny c编译器源代码可以编译汇编代码吗

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++目录下
& & & &--MinGW &
三、配置环境变量
g++ 的参数使用
显示g++ 的版本 。
--target-help
显示特定平台环境的参数支持。比如嵌入式领域使用的avr-g++会对MCU 支持一些优化参数。
-std=&语言标准&
如:-std=c++11& ,使用C++11标准
使用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优化级别最高。优化的是什么呢?生成的程序的大小和程序的执行速度。
编译时,不显示任何警告消息。
编译时,显示所有出现的警告消息。
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
对源文件进行预处理,预处理后生成.i( 或者是 .ii)文件。通过此命令可以查看于处理器是如何&修改&我们的.cpp源文件的,以理解预处理的工作机制。生成的是文本文件。&&
g++ -E -o hello.i hello.cpp & & & & & #对hello.cpp进行预处理生成hello.i文件
只进行预处理和编译,编译是C++编译器的核心操作,其结果就是将C++代码中转译为汇编代码,生成.s汇编文件。生成的依然是文本文件。
g++ -S -o hello.s hello.cpp&&&&&&&&& #生成汇编文件hello.s
只进行 预处理, 编译,汇编操作,生成.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
输出源文件的#include指令 ( #include&head_file& , #include"head_file" ) 引起的所有包含文件依赖。
举个栗子:
/*cmd.cpp*/#include &cmath&
int main()
使用-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" 指令。
阅读(...) 评论()怎样在gcc 编译的时候看汇编代码
[问题点数:20分,结帖人keroro520]
本版专家分:186
结帖率 87.5%
CSDN今日推荐
本版专家分:43786
2013年7月 总版技术专家分月排行榜第一
2013年7月 C/C++大版内专家分月排行榜第一
2015年9月 C/C++大版内专家分月排行榜第二2013年6月 C/C++大版内专家分月排行榜第二
本版专家分:387253
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
CSDN今日推荐技术改变命运。。。
g++ 编译和链接
传统意义上的编译程序分两步走 —— 编译和链接:
1.编译(compile):指用编译器(compiler)将源代码(source code)生成二进制目标文件(object file),在Windows下也就是 .obj 文件,UNIX下是 .o 文件。编译时,编译器需要的是语法的正确,函数与变量的声明的正确,编译器只检测程序语法,和函数、变量是否被声明,函数并不需要被定义。
UNIX下g++的语法为:
g++ -c file.cpp
-c 是compile的意思,此命令将会生成 file.o 的目标文件。
2.链接(link):找到所要用到函数所在的目标文件,并把它们链接在一起合成为可执行文件(executable file)。链接时,要确保编译器能找到所有被用到了的函数所在的目标文件。
g++ file1.o file2.o -o program.exe
-o 是指定生成的可执行文件名称(output)。若不给出,默认的名称为 a.out
上述两部通常也可以合在一起完成:
g++ file1.cpp file2.cpp -o program.exe
这完全等同于上面两步的结合,会先生成目标文件,然后链接成 file.exe
3. 库 (library)
对于一个源文件很多的大项目,为了避免重复编译,也为了方便编译器链接,通常会把一些常用到的目标文件打包(archive),于是就成为了传说中的库文件(library)。在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
UNIX 所要用到的命令:
1)ar -- create, modify, and extract from archives.
@Usage: ar cr lib****.a file1.o file2.o
**** 为自定义的库文件名。
标签 c (create):如果库不存在,则创建库;
标签 r (replace):如果库中已存在要添加的对象文件,则旧的对象文件将被替换。
实际上 ar 只是一个打包工具,是archive(打包)的首字母。它将一系列的目标文件首位连接在一起,并内嵌一个索引表,使得编译器能够方便地找到所需要的函数。一般来说,由于函数索引表的存在,对库的链接要比对一般的对象文件的链接更快。如果 ar 未能完成此项索引表工作,还可以手动用以下的 ranlib 命令创建索引表。
2) ranlib -- generate index to archive.
@Usage: ranlib lib****.a
3) nm -- list symbols from object files.
nm可以用来显示 ranlib 所构建的索引表。你将会看到所有库里的函数名(除了模板函数template function)。
4. 在编译时链接库
创建了自己的库,以后要用到相关函数的时候,只需在代码中声明所要用的函数(必须和库中定义得相同)。在链接的时候,需要给出库的名称和位置:
g++ file1.o file2.o -o program.exe -L**** -l****
-L 后紧跟库文件所在的目录地址,-l 后紧跟库名。
编译器在链接的时候会在所指定的目录地址下寻找名为 lib****.a 的库文件。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!g++ -s之后产生的汇编代码?
[问题点数:50分,结帖人sunote]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:68
本版专家分:37064
2008年 总版技术专家分年内排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
2008年12月 总版技术专家分月排行榜第二2008年3月 总版技术专家分月排行榜第二2008年2月 总版技术专家分月排行榜第二
本版专家分:105
匿名用户不能发表回复!|
CSDN今日推荐g++用什么命令生成优化过的汇编代码_百度知道
g++用什么命令生成优化过的汇编代码
我有更好的答案
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4.连接目标代码,生成可执行程序[链接器ld][参数详解]-x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。  可以使用的参数吗有下面的这些  `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.  看到英文,应该可以理解的。  例子用法:  gcc -x c hello.pig  
采纳率:76%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 vb脚本编译器代码 的文章

 

随机推荐