喵呜:linux环境基础开发工具使用篇之linux开发工具:linux编译器-gcc/g++使用(代码片段)

爱吃榴莲的喵星人 爱吃榴莲的喵星人     2023-03-09     255

关键词:

文章目录


一、背景知识

提示:gcc -v 查看版本信息

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 链接(生成可执行文件或库文件)

基础知识链接

二、gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

1.预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。

实例: gcc –E hello.c –o hello.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

2.编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S hello.i –o hello.s

3.汇编(生成机器可识别代码)

汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
实例: gcc –c hello.s –o hello.o

4.连接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段。
实例: gcc hello.o –o hello

在这里涉及到一个重要的概念:函数库

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函
数“printf”了,而这也就是链接的作用
提示:ldd的作用是打印可执行档依赖的共享库文件。

函数库一般分为静态库和动态库两种。

1’静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
2’动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件。
3.gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。

gcc编译如何使用静态库

静态库下载:

yum install glibc-static

gcc 编译时使用动态库生成可执行文件与gcc 编译时使用静态库生成可执行文件对比


以上是本篇文章的全部内容,如果文章有错误或者有看不懂的地方,多和喵博主交流。互相学习互相进步。如果这篇文章对你有帮助,可以给喵博主一个关注,你们的支持是我最大的动力。

linux环境基础开发工具使用(代码片段)

Linux环境基础开发工具使用Linux软件包管理器yumLinux编辑器-vim使用vim的基本模式vim的基本操作vim正常模式命令集vim末行模式命令集vim配置Linux编译器-gcc/g++使用Linux编译器-gcc使用预处理(进行宏替换)编译(生成汇编)... 查看详情

linux基础篇之五基础命令----3

在linux中,我们经常需要查找某些文件,以及文件所在目录等。那么我们需要用到一些基本的文件查找类命令。文件查找命令主要有以下几个:·which    查看命令或可执行文件的完整路径·whereis   显示二... 查看详情

linux基础篇之五基础命令----3

在linux中,我们经常需要查找某些文件,以及文件所在目录等。那么我们需要用到一些基本的文件查找类命令。文件查找命令主要有以下几个:·which    查看命令或可执行文件的完整路径·whereis   显示二... 查看详情

linux环境基础开发工具的使用

文章目录Linux软件包管理器yum什么是软件包查看软件包安装软件卸载软件Linux编辑器-vimvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集Linux编译器-gcc/g++背景知识gcc/g++的编译预处理编译汇编链接静态库... 查看详情

linux——环境基础开发工具的使用(代码片段)

目录一、Linux软件包管理器—yum1.Linux下软件安装的方式2.如何查看Linux下的软件包 3.利用yum来安装相应的软件4.利用yum来进行软件的卸载5.如何实现云服务器与本地机器间的文件互传 6.注意事项 二、Linux编辑器—vim的使用1.vim常... 查看详情

linux下环境基础开发(代码片段)

...络查看软件包删除软件安装软件文件互传扩展源安装Linux开发工具vim的基本概念vim的基本操作插入模式命令模式底行模式nano简单vim配置配置文件的位置创建用户删除用户Linux编译器gcc/g++背景库Linux调试器-gdb背景使用Linux项... 查看详情

linux基础篇之五基础命令----2

回顾:上一篇博文我们讲的是几个处理目录类的常用命令,分别是ls,cd,pwd,mkdir,rmdir,cp,rm 链接:http://ccschan.blog.51cto.com/11854461/1841723本文主要讲文件查看类的命令,在linux中,这些命令是最基本的,也是必须掌握的。文件查看类... 查看详情

linux环境基础开发工具的使用(yumvimgccg++gdbmake/makefile)(代码片段)

文章目录Linux软件包管理器-yumLinux下安装软件的方式认识yum查找软件包安装软件如何实现本地机器和云服务器之间的文件互传卸载软件Linux编辑器-vimvim的基本概念vim下各模式的切换vim命令模式各命令汇总vim底行模式各命令汇总vim... 查看详情

linuxlinux环境基础开发工具使用介绍(代码片段)

Linux环境基础开发工具使用介绍(一)一.Linux软件包管理器yum的使用1.什么是软件包2.查看软件包3.如何安装软件4.如何卸载软件5.lrzsz的安装和使用6.yum安装有意思的小程序二.Linux编辑器-vim使用1.vim的基本概念2.vim的基本操... 查看详情

linux从青铜到王者第二十四篇:linux网络基础第四篇之websocket协议(代码片段)

系列文章目录文章目录系列文章目录前言一、WebSocket简介二、WebSocket产生背景三、WebSocket实现原理四、WebSocket协议举例五、WebSocket使用1.WebSocket介绍2.WebSocketAPI3.WebSocket事件1.open2.Message3.Error4.Close4.WebSocket方法1.send()2.close()5.WebSocket... 查看详情

linux环境基础开发工具使用(代码片段)

...、sz查看软件包如何安装软件如何卸载软件总结:Linux开发工具---编辑器vim使用1.vim的基本概念2.vim的基本操作3.vim正常模式命令集4.vim末行模式命令集5.vim操作总结6.简单vim配置7.更深入可以去参考Linux开发工具---编译器-gcc/g+... 查看详情

linux环境基础开发工具使用(代码片段)

...、sz查看软件包如何安装软件如何卸载软件总结:Linux开发工具---编辑器vim使用1.vim的基本概念2.vim的基本操作3.vim正常模式命令集4.vim末行模式命令集5.vim操作总结6.简单vim配置7.更深入可以去参考Linux开发工具---编译器-gcc/g+... 查看详情

linux从青铜到王者第十七篇:linux网络基础第二篇之udp协议

系列文章目录文章目录系列文章目录前言一、传输层1.再谈端口号2.端口号范围划分3.认识知名端口号(Well-KnowPortNumber)4.进程和端口号两个问题5.netstat查看网络状态二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP... 查看详情

linux环境基础开发工具及使用(yumvimgccg++gdb)(代码片段)

🌏摔倒了,就正好躺下来歇歇,只要方向是对的,慢一点也会到。🎓Yum🐱‍💻Yum概述yum(YellowdogUpdater,Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。Yum是rpm系统的自动更新... 查看详情

linux环境基础开发工具的使用(代码片段)

文章目录Linux软件包管理器yum软件包查看软件包安装软件卸载软件Linux编辑器-vim使用vim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集简单vim配置Linux编译器-gcc/g++使用Linux调试器-gdb使用Linux项目自动化构建工... 查看详情

基础篇之io流

1.和/及pathSeparator与separator是在Windows下的文件分割符,在java中表示转义,文件分隔符为\/非Windows下的文件分割符如Linux,推荐使用的格式,在其他情况下也可以使用pathSeparator与系统有关的路径符分割符,相当于“;”,可以跨平... 查看详情

linux从青铜到王者第二十篇:linux网络基础第三篇之ip协议

系列文章目录文章目录系列文章目录前言一、IP协议基本概念二、IPv4首部三、网络号和主机号四、早期地址管理方式五、CIDR(ClasslessInterdomainRouting)方式六、特殊的IP地址七、IP地址的数量限制八、路由控制总结前言一、IP协议基本... 查看详情

linux系列debian系统安装及qt基础开发环境配置(代码片段)

Linux系列Debian系统安装及Qt基础开发环境配置文章目录Linux系列Debian系统安装及Qt基础开发环境配置摘要1Debian10安装1.1VMTools安装2安装Qt2.1Qt环境配置3Git安装4最后关键字:Debain、Qt、git、vm、linux摘要​又要开新坑了,由于某些原... 查看详情