尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux-编译器gcc/g++的使用
一、gcc的完成流程1.预处理实例gcc -E test.c -o test.i预处理阶段需要做的事情有宏定义的替换、条件编译的执行、头文件的包含、注释的去除等这些工作。选项-E的作用是从现在开始进行程序的翻译将预处理工作做完就停下来。选项-o是指自定义生成的目标文件名.i文件是已经经过预处理后的C原始文件。2.编译实例gcc -S test.i -o test.s在编译阶段gcc首先要检查代码的规范性是否具有语法错误以确定代码实际要做的工作在检查无误后gcc把代码翻译为汇编语言。选项-S的作用是从现在开始进行程序的翻译将编译工作做完后就停下来。选项-o是自定义gcc操作后生成的文件名。3.汇编实例gcc -c test.s -o test.o在汇编阶段gcc的工作主要是把编译阶段生成的.s文件转化为目标文件。选项-c的作用是从现在开始进行程序的翻译将汇编工作完成后就停下来。4.链接实例gcc test.o -o test在链接阶段gcc会将可重定位目标(目标文件)和库进行链接形成可执行程序。gcc默认编译是以release方式发布的无法直接调试如果要以debug方式发布必须携带 -g 选项。二、函数库的概念在链接过程中gcc会将目标文件和函数库进行链接生成可执行文件函数库分为动态库和静态库两种。静态库是指在编译链接时把库文件的代码全部加入到可执行程序中因此生成的文件比较大但在运行时也就不再需要库文件了。其后缀名一般为 .a 。动态库则与静态库相反在编译链接时并没有把库文件的代码加入到可执行程序中而是在程序执行时由运行时链接文件加载库这样可以节省系统的开销。动态库后缀一般为 .so 。函数库在linux中的路径/usr/lib64/libc.so函数库的命名规则[lib][name][.so.XXX]lib为前缀name为库名.so.XXX为后缀。函数库存在的价值可以减少程序员的重复工作。注一般机器上默认只会安装动态库不会安装静态库。安装静态库的指令1.安装C语言静态库sudo yum install -y glibc-static2.安装C静态库sudo yum install -y libstdc-static静态库和动态库的链接优先级默认情况下动态库链接优先级要高于静态库链接优先级。gcc会优先使用动态库如果没有动态库会去使用静态库。强制使用静态库的指令-staticgcc test.c -o test-static -static如果强制使用静态库但静态库不存在则会导致编译失败-static的本质是改变静态库链接的优先级且要求链接只能是静态库。file指令可以查看链接的库。动态库和静态库的优缺点动态库是共享库可以有效的节省资源(磁盘空间内存空间网络空间)[优点]。但动态库一旦缺失会导致各个程序都无法运行[缺点]。静态库链接完成后不再依赖库程序内已经包含了一份库文件可以独立运行[优点]。但静态链接生成的程序比较消耗资源[缺点]。三、自动化构建工具make/makefilemake是一条指令makefile是一个文件make和makefile搭配使用可以完成项目的自动化构建。例如使用make和makefile快速完成对test.c的编译和清理编译后生成的临时文件makefile的调用方法make清理调用后产生的临时文件make clean[xxlVM-0-2-centos test]$ make //调用gcc进行编译 gcc -o test test.c [xxlVM-0-2-centos test]$ ll total 20 -rw-rw-r-- 1 xxl xxl 52 Sep 9 15:13 makefile -rwxrwxr-x 1 xxl xxl 8560 Sep 9 15:20 test //编译后产生了test可执行文件 -rw-rw-r-- 1 xxl xxl 344 Sep 9 14:45 test.c [xxlVM-0-2-centos test]$ make clean //调用清理 rm -f test [xxlVM-0-2-centos test]$ ll total 8 -rw-rw-r-- 1 xxl xxl 52 Sep 9 15:13 makefile -rw-rw-r-- 1 xxl xxl 344 Sep 9 14:45 test.cmake会自动执行gcc的编译指令且如果makefile中有多个关联的依赖关系和依赖方法make会自动推导makefile的依赖关系。make会自顶向下扫描makefile文件里面的内容因此一般不把clean写在makefile文件的顶部。make一般只能编译一次[xxlVM-0-2-centos test]$ make gcc -o test test.c [xxlVM-0-2-centos test]$ make make: test is up to date. //make再次编译就不行了原因make编译后生成了可执行文件但因为源文件的内容并没有发生变化如果make再次编译依旧会产生和之前一样的可执行文件因此make就认为没有再次编译的必要。make会根据源文件和目标文件的新旧判断是否需要重新执行依赖关系进行编译。查看源文件和目标文件新旧关系的指令stataccess最后访问文件的时间(在比较新的Linux系统中access的更新方式发生了变化不会再因为modify和change的改变频繁进行修改而是根据modify和change修改一定次数后再进行修改)modify对文件内容进行最后一次修改的时间(make会根据这个时间来比较源文件和目标文件的新旧)change对文件属性进行最后一次修改的时间[xxlVM-0-2-centos test]$ stat test.c //查看源文件的最后修改日期 File: ‘test.c’ Size: 344 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 656645 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ xxl) Gid: ( 1000/ xxl) Access: 2026-09-09 14:45:37.308304082 0800 Modify: 2026-09-09 14:45:35.570291701 0800 Change: 2026-09-09 14:45:35.572291715 0800 Birth: - [xxlVM-0-2-centos test]$ stat test //查看目标文件的最后修改日期 File: ‘test’ Size: 8560 Blocks: 24 IO Block: 4096 regular file Device: fd01h/64769d Inode: 656649 Links: 1 Access: (0775/-rwxrwxr-x) Uid: ( 1000/ xxl) Gid: ( 1000/ xxl) Access: 2026-09-09 15:27:23.311839372 0800 Modify: 2026-09-09 15:27:21.896828634 0800 Change: 2026-09-09 15:27:21.896828634 0800 Birth:如果需要可以一直进行make编译.PHONY刷新文件的时间属性的指令touchtouch修改文件时间的的两个选项 -a(修改access) 、-m(修改modify)。如果touch后接的是一个已经存在的文件那么这个文件的access、modify、change时间属性都会被修改。[xxlVM-0-2-centos test]$ touch test.c [xxlVM-0-2-centos test]$ stat test.c File: ‘test.c’ Size: 344 Blocks: 8 IO Block: 4096 regular file Device: fd01h/64769d Inode: 656645 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ xxl) Gid: ( 1000/ xxl) Access: 2026-09-09 15:38:56.305087582 0800 Modify: 2026-09-09 15:38:55.972085065 0800 Change: 2026-09-09 15:38:55.972085065 0800 Birth: -例如一个完整的test.c的编译流程1 test:test.o //链接 2 gcc -o test test.o 3 test.o:test.s //汇编 4 gcc -c test.s -o test.o 5 test.s:test.i //编译 6 gcc -S test.i -o test.s 7 test.i:test.c //预处理 8 gcc -E test.c -o test.i 9 10 clean: //清理临时文件 11 rm -f test test.o test.i test.s关闭使用make时依赖方法的回显在gcc前面加一个符号1 test:test.c 2 gcc -o test test.c 3 clean: 4 rm -f test使用make同时编译多个文件.PHONY:allall:test.c text.c txxt.c#makefile .PHONY:all all:test.c text.c txxt.c test:test.c gcc -o $ $^ -stdc99 text:text.c gcc -o $ $^ -stdc99 txxt:txxt.c gcc -o $ $^ -stdc99 .PHONY:clean clean: rm -rf test text txxt
RELATED

相关推荐

xerj autoindex 实战:一个文件夹同时检索 JSON、JSONL 与 gzip 日志

xerj autoindex 实战:一个文件夹同时检索 JSON、JSONL 与 gzip 日志

【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command indexes code, docs, logs and PDFs for search, RAG, security audits and agent me…

📅 2026/10/17 2:28:57
GetQzonehistory:一键把QQ空间历史说说完整导出成Excel和网页

GetQzonehistory:一键把QQ空间历史说说完整导出成Excel和网页

GetQzonehistory:一键把QQ空间历史说说完整导出成Excel和网页 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory QQ空间的老说说没法批量翻,官方也没有导出按钮&…

📅 2026/10/17 2:28:57
ROS手柄控制机器人底盘:从joy节点到cmd_vel的完整实现

ROS手柄控制机器人底盘:从joy节点到cmd_vel的完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/17 2:28:57
MORE NEWS

更多资讯

📰

大模型生产级后训练:从微调到可落地的流水线

Miles v0.1:把大模型后训练做成一条生产级流水线很多团队现在其实不缺基座模型。真正缺的,是那个能把手里的基座模型变成一个“真正可用、敢上线”的模型的关键环节——后训练(Post-training)。如果你跑过开源模型,大概…

📰

生产级后训练实战:从数据准备到模型部署的完整指南

在业务迭代中做大模型微调时,我经常陷入一个尴尬的状态:单机实验能跑通,一上多卡训练就疯狂报错;训练完的模型离线指标不错,上线后效果却不稳定;日志分散在好几个终端窗口,根本看不出训练是否健…

📰

Muse Code新计划解读:本地AI辅助编码与批量任务实践指南

Muse Code 这个名字,最近在开发者圈子里出现的频率开始变高。它不是又一个代码格式化插件,也不是单纯的 AI 聊天窗口,而是一个以“新计划与新功能”为主线推进的项目,核心方向直指 AI 辅助编码、仓库级上下文理解、批量任务处理和…

📰

AI应用工程化实践:从模型选型、本地部署到批量任务落地

AI 上半场的竞争,集中在模型本身:参数规模、预训练数据、榜单分数。到了应用层,这些优势不一定能直接换成产品价值。下半场的叙事已经换了主语,从“谁的模型更强”,变成“谁的应用能稳定跑完一条真实业务链路”。本文不…

📰

VC++ 通过 USB 直连 GT800 打印 ZPL 标签:通道选型、指令拼装与避坑指南

简介:本资源面向使用 VC 开发斑马打印机控制程序的开发者,聚焦通过 USB 接口与 GT800 打印机通信并用 ZPL 语言打印条形码这一具体问题。包内共 24 个文件,以 cpp 源码、h 头文件、vcxproj 工程配置、sln 解决方案及 suo、ipch 等 Visual Stu…

📰

WPE封包全套实战:从Winsock Hook到封包修改重放指南

简介:面向网络封包分析、游戏调试与协议自学者,WPE封包全套资料覆盖基础概念与环境准备,适合零基础入门,也适合有一定基础的读者对照查漏补缺、系统梳理知识脉络。内容围绕WPE环境搭建、界面功能、截包过滤、数据查看与修改重发等…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬