linux系列笔记---------g++/gcc应该这样学!(代码片段)

嵌入式历练者 嵌入式历练者     2023-01-20     675

关键词:

作者:嵌入式历练者
ID : Eterlove
记下相关笔记,记录我的学习生活!站在巨人的肩上Standing on Shoulders of Giants!
该文章为原创,转载请注明出处和作者:https://blog.csdn.net/Eterlove/article/details/120929816

1.g++/gcc的区别

【!】gcc
认为预处理后的文件(.i)是 C 文件,并且设定 C 形式的连接.
【!】g++
认为预处理后的文件(.i)是 C++文件,并且设定 C++形式的连接.

2.程序的编译过程

  • 严格来说,源程序经过预处理(preprocessing), 编译(compilation), 汇编 (assembly),链接(linking)四个阶段生成可执行文件(a.out/a.exe)
  • 在windows上生成可执行文件a.exe,而在Linux上生成a.out。当然你可以重新起个名字。
    先来看这段代码,现在Linux上编译这个hello.c这个源文件,并生成可执行文件。
gcc hello.c -o www
这段代码告诉编译器编译hello.c文件,并生成一个名为www的可执行文件
-o是参数,给生成的文件起一个自己想要的名字,格式:-o 文件名(中间有个空格)
当然,-o参数位置可变,例如
gcc -o www hello.c

3.谈谈源文件后缀名

这个来自于Gcc手册,目前也有热心网友中文翻译的,中文有疑惑的以Gcc英文为准。
源文件后缀名指出语言种类以及后期的操作
.c C 源程序;预处理,编译,汇编
.C C++源程序;预处理,编译,汇编
.cc C++源程序;预处理,编译,汇编
.cxx C++源程序;预处理,编译,汇编
.m Objective-C 源程序;预处理,编译,汇编
.i 预处理后的 C 文件;编译,汇编
.ii 预处理后的 C++文件;编译,汇编
.s 汇编语言源程序;汇编
.S 汇编语言源程序;预处理,汇编
.h 预处理器文件;通常不出现在命令行上


.o 目标文件(Object file)
.a 归档库文件(Archive file)

4.掌握基本命令

接下来我们先来写个超简单的代码:
创建一个hello.c,在vim编辑器写下hello代码

[root@localhost home]# ls
cheng
[root@localhost home]# touch hello.c
[root@localhost home]# vi hello.c
[root@localhost home]# gcc hello.c
[root@localhost home]# ls
a.out  cheng  hello.c
[root@localhost home]# ./a.out
hello
#include"stdio.h"
int main()

printf("hello\\n");
return 0;

如上所知,在没有加上参数-o,默认生成了a.out,执行文件a.out输出得到hello
【参数】-o filename 指定输出的文件为filename
我们继续这段代码,给编译后生成的可执行文件起个名字www

gcc hello.c -o www
或gcc -o www hello.c

[root@localhost home]# gcc -o www hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  www
[root@localhost home]# ./www
hello

【参数】-E 预处理后即停止,不进行编译.预处理后的代码送往标准输出
可以使用-o 选项选择其他名字.
我们来看看只经过预处理阶段的代码:

gcc -E hello.c -o pre
当然你也能这样gcc -o pre -E hello.c
cat pre

验证命令是否正确,没有比自己亲手去试一试更好的方法!
用cat指令查看pre文件内容(不为只预处理后文件起个名字,它将在终端显示出来)

【参数】-S注:大写) 编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件,可以使用-o 选项选择其他名字。

[root@localhost home]# gcc -o pre -E hello.c
[root@localhost home]# gcc -S hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  hello.s  pre  www
cat hello.s


这段汇编代码对于汇编程序员很熟悉。
【注意-s(小写的s)】
经过验证,发现gcc -s www.c会在没有指定文件名的情况下直接生成a.out可执行文件(Linux),跟gcc www.c结果一致。

【参数】-c 汇编源文件,但是不作连接.简单说就是完成前三个阶段,生成.o文件不做链接,编译器输出对应于源文件的目标文件,可以使用-o 选项选择其他名字。

[root@localhost home]# gcc -c hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  hello.o  hello.s  pre  www
[root@localhost home]# vi hello.o

当你用vi编辑器打开hello.o时,你会发现看不懂,看不懂就对了,那是给机器看的机器码,只是未进行链接生成可执行文件。

这些基本命令学会就够用了,若遇到其他的会查Gcc手册就行,如果需要Gcc中文手册,评论区@我,以前还有上传免费资源,现在平台没有了,所以需要的私信我就可以了。

gcc/g++命令参数

...链接阶段但是在linux环境下,我们只能借助gcc/g++完成这一系列的操作-o参数:g++main.cpp-omain  -o:output的意思,指将main.cpp输出为main。如果不指名具体的执行文件名(g++main.cpp),将会在同级目录下生产a.out文件-E参数:g 查看详情

linux——gcc/g++的使用(代码片段)

...掉注释宏替换条件编译3.编译4.汇编5.链接1.gcc的介绍gcc是linux中的c语言编译器,我们在linux下要编译我们的写的c语言代码,就需要使用gcc编译器。那么,我们写的test.c编译生成可执行程序经过以下步骤:下面我将... 查看详情

linux手机管理多版本gcc和g++

1.cmake升级参考:linux手机更新cmake版本2.gcc和g++升级参考:linux手机更新gccg++版本root@ubuntu-phablet:/#gcc--versiongcc(Ubuntu/Linaro5.4.0-6ubuntu1~16.04.12)5.4.020160609Copyright(C)2015Fre 查看详情

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

】用于GCC/G++的宏来区分Linux和MacOSX?【英文标题】:MacrosforGCC/G++todifferentiateLinuxandMacOSX?【发布时间】:2011-02-0316:35:01【问题描述】:用于区分Linux和MacOSX的GCC/G++宏?【问题讨论】:HowdoIcheckOSwithapreprocessordirective?的可能重复项【... 查看详情

cmake的一系列问题

尝试在Linux上使用arm-none-linux-gnueabi-gcc开发Android的可执行c文件,代码文件较多时指定编译器set(CMAKE_C_COMPILER"/usr/bin/gcc")set(CMAKE_CXX_COMPILER"/usr/bin/g++")静态编译set(CMAKE_EXE_LINKER_FLAGS"-static") 查看详情

linux超好用的编译工具——gcc/g++(代码片段)

...,我是不一样的烟火a,今天我将要为大家讲解在Linux下超好用的编译工具——gcc/g++。文章将会为大家详细讲解gcc/g++中常用的选项和具体过程,相信看完的小伙伴都能快速掌握gcc/g++的使用。由于gcc和... 查看详情

gcc/g++命令

...cnblogs.com/cryinstall/archive/2011/09/27/2280824.html注意:gcc和g++是linux系统下的编程常用指令,C语言文件用gcc,cpp文件用g++。1.预处理 g++-Efilename.cpp>filename.i功能:输出预处理后的文件,linux下以.i为后缀名。只激活预处理,这个不生... 查看详情

c++学习笔记c++编程环境配置(代码片段)

g++跟gcc之间是否有依赖关系g++跟gcc之间没有依赖关系,两者分别对应面向C++和C语言的编译程序,关于gcc和g++的区别,请参考知乎回答《gcc和g++是什么关系?——gcc和g++的区别》... 查看详情

gcc/g++超详细上手教程(代码片段)

Linux编译器-gcc/g++使用:写在开篇:详细介绍一哈Linux下gcc/g++的使用,收藏起来呀~~正文开始@Assassin目录:Linux编译器-gcc/g++使用:1.背景知识:2.gcc如何完成:3.编译过程:4.预 查看详情

编译共享库 linux gcc/g++ cpp

】编译共享库linuxgcc/g++cpp【英文标题】:Compilesharedlibrarylinuxgcc/g++cpp【发布时间】:2017-12-0518:21:23【问题描述】:我已经成功编译并创建了一个共享对象,但我不确定它是否真正共享并链接/模拟到DLL。你能告诉我它是否正确吗?... 查看详情

linux修炼6.gcc/g++及makefile工具篇(代码片段)

每一个不曾起舞的日子,都是对生命的辜负。Linux-gcc/g++及Makefile本节目标程序的翻译过程1.程序的翻译过程2.理解选项的含义3.动态链接和静态链接Linux项目自动化构建工具-make/Makefile1.背景2.“见见猪跑”3.makefile原理及... 查看详情

cc,gcc,g++

gcc和g++都是GUN(组织)的编译器。gcc是C编译器g++是C++编译器linux下cc一般是一个符号连接,指向gccls/usr/bin下面是linux自带的autoconf工具-rwxr-xr-x. 1rootroot   14631Nov11 2010autoconf-rwxr-xr-x. 1rootroot &nb 查看详情

linux编译器gcc/g++调试器gdb项目自动化构建工具make/makefilegit

...+--->编译C++或C语言预处理、编译、汇编、链接Linuxgcc生成可执行程序的4个步骤:预处理、编译、汇编、链接gcc如何完成?格式:g 查看详情

linux下如何升级gcc和g++编译器(代码片段)

1、sudoyum-yintallepel-release2、sudoyuminstallcentos-release-scl-rhcentos-release-scl3、sudoyuminstalldevtoolset-7-gcc4、sudoyuminstalldevtoolset-7-gcc-c++5、将以下命令复制到~/.bashrc文件下source/opt/rh/devt 查看详情

linux下如何升级gcc和g++编译器(代码片段)

1、sudoyum-yintallepel-release2、sudoyuminstallcentos-release-scl-rhcentos-release-scl3、sudoyuminstalldevtoolset-7-gcc4、sudoyuminstalldevtoolset-7-gcc-c++5、将以下命令复制到~/.bashrc文件下source/opt/rh/devtoolset-7/enable 查看详情

《linux从0到99》四linux编译器(gcc/g++)和调试器(gdb)(代码片段)

Linux编译器和调试器的使用1.Linux编译器gcc/g++使用01预处理02编译03汇编04连接2.Linux调试器gdb01背景知识02常用指令3.make与Makefile01背景以及定义02理解makefile高效的原理03项目清理1.Linux编译器gcc/g++使用01预处理主要处理源... 查看详情

gcc与gcc,g++区别(代码片段)

参考文章https://www.cnblogs.com/liuzhenbo/p/11027197.html看的Linux公社的一篇文章,觉得不错,内容复制过来了。其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c... 查看详情

centos7/linux安装gcc教程

...​RHEL​​/Centos7默认的开发工具,包含gcc,g++,make等等一系列工具:[root@linuxprobe~]#yumgroupinstall“DevelopmentTools”但是在下载过程中遇到报错ctags-5.8-13.el7.x86_64.rpm的公钥尚未安装我的解决方法是:再用yum进行下载时,会自动匹配​... 查看详情