C/C++ 开发环境 gcc/g++ Linux

gccGUN C Complier

 

Ubantu安装GCC

https://www.linuxidc.com/Linux/2019-06/159059.htm

 

gcc C语言的编译过程

4个阶段:预处理Preprocess,编译Complication,汇编(Assembly),链接Linking

 

预处理:

gcc -E test.c –o test.i

cat –n test.i(查看预处理后的文件,显示行号)

 

编译

gcc –S test.i –o test.s

 

汇编

将汇编代码转成可执行的二进制代码

gcc –c test.s –o test.o

hexdump test.o(查看生成的二进制文件)

 

链接

链接时为了解决多为个文件之间符号引用的问题。

GNU把函数的实现都放到libc.so.6的库文件中,该库文件时GNU的标准C函数库

libc.so.6是linux下GUNC 的函数库(glibc),是gcc在编译时默认使用的C函数库

glibc是操作系统Unix和Linux的基石之一。微软也有自己的C标准实现,叫msvcrt

gcc test.o -o test

./test

 

gcc支持的后缀文件:

文件格式以后缀来识别

 

gcc的语法格式:

gcc [选项] 准备编译的文件 [选项] [目标文件]

用gcc编译一个程序通常是指从预处理到生成可执行文件

 

如果在.c文件中有C++的元素(如bool关键字),用gcc编译就会报错,需要把后最改为.cpp

 

如果用gcc 来编译cpp文件,如果文件中使用了C++标准库的内容,需要使用gcc 的选项-l ,例如 -lstdc++ ,-lpthread,

 

-o选项:

生成结果文件

 

-O选项:

对生成的可执行问及那进行一级优化

 

-x选项:

告诉gcc 需要编译的源文件是声明语言的文件

-x language filename

 

-c选项:

告诉gcc对原文金进行编译和汇编,但不进行链接,此时生成目标文件

有多个源文件时,-c会为每个原文件生成一个.o文件,所以不能使用-o

 

-I(大写i)选项:

用来指定头文件所在的文件夹路径,用法为-I dirpath

若找不到,则到标准的默认路径/usr/local/include下搜素,还找不到的话,再到标准默认路径/usr/include下搜索

如果源码中有双引号的头文件,则最先再当前工作目录下寻找

 

-inlucde选项:

gcc 命令行中也能包含头文件

再gcc编译时通过-include 来保护xxx.h

gcc [srcfile] -include [headfile]

 

-wall选项:

选项-Wall显示所有警告信息,看它的字面意思就知道 warn all

 

-g选项:

产生共gdb调试用的可执行文件

gcc test.cpp -g -o test

 

-pg选项:

产生供gprof剖析用的可执行文件。gprof是Linux下对C++程序进行性能分析的工具

 

-l选项:

用来链接共享库(动态链接库)

gcc test.cpp -lstdc++ -o test

stdc++是C++标准库的名字,和l之间没有空格

 

 

g++:

g++是GUN推出的C++编译器:

不但可以用来编译传统的C++程序,也可以用来编写现代C++,如C++11/14等

用g++编译c++比gcc更简单,因为自动链接到C++标准库 

 

g++基本语法格式

g++  [选项] 准备编译的文件 [选项] [目标文件]

g++ test1.cpp test2.cpp -o test

 

posted @ 2021-01-10 21:57  KnowledgePorter  阅读(17)  评论(0)    收藏  举报