gcc/g++基本命令简介

gcc & g++现在是gnu中最主要和最流行的c & c++编译器 。
g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c。这时候命令换做gcc即可。其实是无关紧要的。
其实编译器是根据gcc还是g++来确定是按照C标准还是C++标准编译链接。


下面以Test.cpp为例:

命令: g++ Test.cpp
功能:生成默认为a.exe的文件,这个过程包含了编译和链接。
再说下-o命令,-o命令表示输出的意思,gcc/g++命令是非常灵活的,你不指定输出的文件名的时候默认生成的是.exe文件。
你要输出Test.exe的话可以用:g++ -o Test.exe Test.cpp。-o命令是输出的意思,这样就输出了Test.exe。

gcc/g++在执行编译工作的时候,总共需要以下几步:

[cpp] view plaincopyprint?
  1. <span style="font-family:'Microsoft YaHei';font-size:16px;">    /************************* 
  2.         Test.cpp 
  3.     *************************/  
  4.     #include <IOSTREAM>  
  5.   
  6.     static int t = 1;  
  7.     #define T 9  
  8.   
  9.     using namespace std;  
  10.   
  11.     typedef int Status;  
  12.   
  13.     int main()  
  14.     {  
  15.         Status i = 1;  
  16.         cout << T * i << endl; //Test Cout  
  17.         return 0;  
  18.     }</span><span style="font-family: 'Microsoft YaHei'; font-size: 18px; ">  
  19. </span>  




1.预处理,生成.i的文件[预处理器cpp]

命令:g++ -E Test.cpp > Test.i 

功能:输出预处理后的文件,linux下以.i为后缀名。只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。用编辑器打开Test.i会发现有很多很多代码,你只需要看最后部分就会发现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。下面是Test.i文件的最后部分,可以看见宏的替换和注释的消除。

[cpp] view plaincopyprint?
  1. <span style="font-family:'Microsoft YaHei';font-size:16px;"># 5 "Test.cpp" 2  
  2.   
  3. static int t = 1;  
  4.   
  5. using namespace std;  
  6.   
  7. typedef int Status;  
  8.   
  9. int main()  
  10. {  
  11.  Status i = 1;  
  12.  cout << 9 * i << endl;  
  13.  return 0;  
  14. }</span>  


2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]

命令:g++ -S Test.cpp
功能:会生成Test.s文件,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。

3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

命令:g++ -c Test.cpp 
功能:.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。

4.连接目标代码,生成可执行程序[链接器ld]

命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同


在上面各个步骤中你可以用-o命令输出你自己想要的各种名字。比如最后一个命令,用下面的输出Test.exe
你可以g++ Test.o -o Test.exe -L F:\vs2008\VC\include\iostream


写了上面的就希望能够理解整个源文件是怎么变成可执行文件的,gcc/g++确实是很给力的啊····(*^__^*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python返回长度值_Python 文件 truncate() 方法(截断返回截取长度)

概述Python 文件 truncate() 方法用于截断文件并返回截断的字节长度。指定长度的话&#xff0c;就从文件的开头开始截断指定长度&#xff0c;其余内容删除&#xff1b;不指定长度的话&#xff0c;就从文件开头开始截断到当前位置&#xff0c;其余内容删除。语法truncate() 方法…

Opencv中IplImage的四字节对齐问题

一、结构解释IplImage数据结构体中有两个宽度&#xff1a;1 是width属性&#xff0c;表示图像的每行像素数&#xff1b;2 是widthStep属性&#xff0c;表示存储一行像素需要的字节数。在OpenCV里边&#xff0c;widthStep必须是4的倍数&#xff0c;从而实现字节对齐&#xff0c;…

庞佐错觉_水晶球错觉

庞佐错觉我注意到人们有时会避免进行彻底的测试。 对于某些人来说&#xff0c;这听起来像是伪造的&#xff0c;但请听我说…… 测试会产生被困的感觉&#xff0c;每引入一个新的测试&#xff0c;负担就会加重。 建立稳定&#xff0c;无干扰且质量保证的测试套件是一项艰巨的任务…

静态编译和动态编译区别

静态函数库 一般扩展名为&#xff08;.a&#xff09;,这类的函数库通常扩展名为libxxx.a 。 这类函数库在编译的时候会直接整合到程序中&#xff0c;所以利用静态函数库编译成的文件会比较大&#xff0c;这类函数库最大的优点就是编译成功的可执行文件可以独立运行&#xff0c;…

python怎么爬取电影海报_python爬虫之通过BeautifulSoup获取豆瓣最新上映电影的海报...

0.目录1.分析页面2.初步代码3.完整代码4.总结5.补充1.分析页面上一次我们讲了xpath获取豆瓣最新上映电影的海报&#xff0c;这一次会分析如何使用BeautifulSoup获取。启程&#xff1a;python爬虫之通过xpath获取豆瓣最新上映电影的海报​zhuanlan.zhihu.com首先&#xff0c;进入…

switch使用中遇到的问题

switch分支语句中case判断不会进行隐式数据类型转换&#xff1b; 1 const fn (value) > {2 let str all;3 switch (value) {4 case :5 return all0;6 case 3:7 return all3;8 case 4:9 return all4;…

opencv读取视频并保存为图片

1.功能&#xff1a;opencv读取指定文件夹中的视频文件&#xff0c;按照一定的间隔截取某些帧&#xff0c;将这些帧图像连续命名&#xff0c;存储在指定文件夹里。 2.代码如下&#xff1a; &#xff08;1&#xff09;IplImage #include <stdlib.h> #include <stdio.h&g…

将Jython嵌入到您的Java代码库中

Jython是一个使用相当可靠的语法的快速Java脚本的好工具。 实际上&#xff0c;当使用jmx为您的Java应用程序实现一些维护或监视脚本时&#xff0c;它的运行效果非常好。 如果您与其他具有python背景的团队合作&#xff0c;则将python集成到您的java应用程序是绝对有意义的。 …

C语言的编译链接过程详解

学过C语言的人都应该知道&#xff0c;我们所编辑的C语言程序是不能直接放到机器上运行的&#xff0c;它只不过是一个带".c"后缀的文件&#xff08;也称为源代码&#xff09;而已&#xff0c;需要经过一定的处理才能转换成机器上可运行的可执行文件。我们将对C语言的这…

python 谷歌登录_用Python登录Gmail并发送Gmail邮件的教程

这篇快文介绍了使用Gmail作为您的e-mail服务器&#xff0c;通过Python的内置SMTP库发送电子邮件。它并不复杂&#xff0c;我保证。下面是如何在Python中登录GMail&#xff1a;import smtplib# The below code never changes, though obviously those variables need values.ses…

Linux wget命令详解

wget是一个下载文件的工具&#xff0c;它用在命令行下。对于Linux用户是必不可少的工具&#xff0c;我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。 wget支持HTTP&#xff0c;HTTPS和FTP协议&#xff0c;可以使用HTTP代理。所谓的自动下载是指&#xff0c;wget可…

opencv连续读图

1.功能利用opencv连续读取指定文件夹中连续命名的图像&#xff0c;可以根据需要设置图像的命名间隔和图像的个数。 2.代码 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> int main(int …

在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...

点击专辑上方“蓝字”关注我吧题目难度: 中等原题链接[1]今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ 另外在公众号里回复 offer 就能看到剑指 offer 系列当前连载的所有文章了题目描述写一个函数 StrToInt&#xff0c…

旅行商问题的n种解法

问题描述&#xff1a; 旅行商问题&#xff08;Traveling Salesman Problem,TSP&#xff09;是旅行商要到若干个城市旅行&#xff0c;各城市之间的费用是已知的&#xff0c;为了节省费用&#xff0c;旅行商决定从所在城市出发&#xff0c;到每个城市旅行一次后返回初始城市&…

将字符串中的指定字符全局替换

// 将 str 中的 a 替换为 Avar str abcabcabc;var result str.replace(a, A);console.log(result: result); // 输出 result:Abcabcabc // 将str 中所有的 a 替换为 Avar str abcabcabc;var result str.replace(/a/g, A);console.log(result: result); // 输出 result:…

Lintcode--5(37)--反转一个三位数

1、题目反转一个只有3位数的整数。123 反转之后是 321。900 反转之后是 9。 2、我的解答 class Solution { public:/*** param number: A 3-digit number.* return: Reversed number.*/int reverseInteger(int number) {int num[3] {0};int result;num[1] number/100;num[2] …

java未检查异常_Java中已检查和未检查的异常

java未检查异常Java有两种类型的异常-已检查和未检查。 简而言之&#xff0c;选中的是指开发人员可以从异常中合理恢复的情况&#xff0c;而未选中的异常是无法处理的编程错误。 本文介绍了何时使用哪种。 但这不是那么简单–受检查的异常使代码变得“丑陋”。 它们迫使开发人员…

python清空列表clear_如何在Python中清空列表?

似乎很“肮脏”以这种方式清空列表&#xff1a;while len(alist) > 0 : alist.pop()是否存在明确的方法&#xff1f;#1楼list []将list重置为空列表。请注意&#xff0c;通常您不应list_保留的函数名称&#xff0c;例如list &#xff0c;它是列表对象的构造函数-例如&#…

linux shell 自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数&#xff0c;然后在shell脚本中可以随便调用。下面说说它的定义方法&#xff0c;以及调用需要注意那些事项。 一、定义shell函数(define function) 语法&#xff1a; [ function ] funname [()] { action; [return int;] } 说明&#xff1a; …

Lintcode--6(767)--翻转数组

1、题目描述原地反转给定的数组&#xff0c;原地意味着你不能使用额外的空间。 2、AC程序 &#xff08;1&#xff09;利用C自带的函数 class Solution { public:void reverseArray(vector<int> &nums) {reverse(nums.begin(),nums.end());} }; &#xff08;2&#xf…