C/C++ 开发环境 gcc/g++ Linux
gcc(GUN 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