赞
踩
gcc是专门用来编译C语言的编译器,而g++是编译C++的编译器(也可以编译C语言,毕竟C++语言兼容C)。Linux下gcc默认使用8字节的指针。
程序翻译的过程如下:
1.预处理:a.去注释b.宏替换c.头文件展开d.条件编译…
2.编译:C语言->汇编语言
3.汇编:汇编语言->可重定向二进制目标文件
4.链接:将多个“.o/.obj”文件合并->可执行文件/.exe gcc和g++也是遵循上述的顺序的。 有些语言是解释型的,不需要遵循上述规律,对于每个C/C++程序员都应该熟练掌握上述的流程。
对应每个过程,使用gcc会更加清晰明了。
这个指令就是把源文件转化成预处理后的文件。
利用vim的“vs”命令同时打开两个文件我们可以发现,main.i文件比main.c文件:注释被去掉了、宏被替换了、多出了头文件的内容、进行了条件编译。
可重定向目标文件里面已经变成了二进制。
这个时候还不能完全运行这个文件,还需要经过链接,把库函数的文件链接过来。
在user下的include目录下有很多的头文件,但是这些都是头文件,正常情况下C语言是需要把头文件的具体实现(也就是源代码)给出来的,但是C语言采取了库的方式来给出。
这里就包含了我们需要的各种动、静态库。而我们在写C语言的时候就会把这些库函数的实现也就是静态库和动态库和我们自己的代码链接为一个可执行程序。
静态库(Static Library)和动态库(Dynamic Library)是在软件开发中常用的两种库文件形式。它们有以下几个区别:
这个可以使用VS2022制作,有的时候我们做好了接口,但是不希望别人看到具体的实现,就可以自己做一个用于链接的静、动态库。关于制作静态库,这里可以看看我的另外一篇博客《C语言静态库的创建和使用》。
如果加上选项“-static”即可生成静态链接的可执行程序,下图可以看出两者大小的区别。
如果你的机器没有办法生成静态库,则需要自己安装,其中C语言静态库安装指令为“sudo yum install -y glibc-static”,C++静态库安装指令为“sudo yum install -y libstdc+±static”,然后在保证语法没有问题的情况下使用“gcc/g++ 源文件名 -o 可执行程序名 -static”即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。