博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc/g++命令认识
阅读量:4306 次
发布时间:2019-06-06

本文共 2042 字,大约阅读时间需要 6 分钟。

gcc & g++是gnu中最主要和最流行的c & c++编译器 。

g++用来针对c++的处理命令,以.cpp为后缀,对于c语言后缀名一般为.c。这时候命令换做gcc即可。

下面以Test.cpp为例:

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

-o命令是输出的意思,这样就输出了名为Test的可执行程序。

 

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

 

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

 

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

 

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

 

二、常用编译选项 -c:编译或汇编源文件,不做连接。 G++ -c test.cpp输出test.o  -o file:制定输出文件为file  -Wall: 输出所有编译警告(最好加上)  -Dmacro=XXX:定义宏。  -shared:生成一个共享库文件 g++ -shared -o libtest.so test.o  -fPIC:生成位置无关目标代码,适用于动态连接。  -llibrarytest:连接名字为librarytest的库 真正名字是liblibrarytest.so(a) so是动态库,a是静态库。 严格按照文件名搜索,版本号要创建软连接。 编译搜索目录: 用户-L指定, LIBRARY_PATH,系统目录/lib  /usr/lib 运行搜索目录: LD_LIBRARY_PATH,ld.so.cache & /etc/ld.so.conf ,系统目录  /lib  /usr/lib 动态库和静态库同名,优先动态库。  -Ldir:添加库文件搜索路径 -Idir(include):添加头文件搜索路径  -g:产生调试信息  -olevel:优化级别,一般用o2  三、静态库、共享库 静态库:一些.o文件打包,在被连接后成为程序的一部分。 编译方法 -g++ -c test.cpp -ar res libtest.a test.o 链接方法: -g++ -Wall -o test testMain.cpp -ltest -L./  共享库:链接的时候不会被复制到程序中。 编译方法: g++ -c fPIC test.cpp	 //要动态 g++ -shared -WI, -soname, libtest.so, -o libtest.so.1.0.1 test.o mv libtest.so.1.0.1 /usr/lib sudo ldconfig & || ll /user/lib/libtest.so //创建一个软连接。     链接方法: g++ -o test test.cpp ./libtest.so -ldx_cxx  四、常用命令 ldd:显示程序依赖的同台共享库。  file:查看文件格式信息。  ldconfig:在搜寻目录下搜索出可以共享的动态链接库

 

转载于:https://www.cnblogs.com/L-Arikes/p/4528718.html

你可能感兴趣的文章
asp.net core结合Gitlab-CI实现自动化部署
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
查看>>
EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题...
查看>>
django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
查看>>
redis事务
查看>>
Java_基础语法之dowhile语句
查看>>
HDU 2175 汉诺塔IX
查看>>
PAT 甲级 1021 Deepest Root
查看>>
查找代码错误.java
查看>>
vc获取特殊路径(SpecialFolder)
查看>>
单例模式
查看>>
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>
代码小思考
查看>>
Unity中的销毁方法
查看>>
ceph删除pool提示(you must first set the mon_allow_pool_delete config option to true)解决办法...
查看>>
2016-7-15(1)使用gulp构建一个项目
查看>>
CSS 设计指南(第3版) 初读笔记
查看>>
markdown学习/mou
查看>>
CentOS 搭建 LAMP服务器
查看>>