- 打通编译全流程认知:帮助读者理解C程序从源代码经过预处理、编译、汇编到链接生成可执行文件的完整过程,不再对编译环节一知半解。
- 掌握GCC与GDB实战技能:解决读者不熟悉GCC编译选项、库搜索路径、警告机制以及GDB调试方法的问题,提升工程实践能力。
- 理解程序运行机制:揭示可执行文件在Linux系统中运行时的进程与系统关系、库调用方式及异常行为,建立系统级编程视角。
- 学会性能剖析方法:介绍GCC自带工具、库函数打桩、valgrind及perf等工具的使用,帮助读者定位和解决程序性能瓶颈。
- 贯通工程实践能力:通过zlib库旁路到FPGA加速卡的综合实例,让读者从工程需求角度考察方案设计与实现,融会贯通各章知识。
- 计算机相关专业高年级本科生和研究生:作为C语言程序设计课程的后续进阶教材,帮助建立完整的系统观。
- Linux开发工程师:需要深入理解编译链接过程和程序运行机制的开发人员,提升工程实践能力。
- 希望深入了解Linux内核的读者:通过观察程序在系统中的运行行为,为学习内核打下坚实基础。
- 高性能计算领域从业者:综合实例涉及FPGA加速卡与zlib库,对高性能计算方案设计有参考价值。
- 按章节顺序阅读:全书由浅入深,建议从第1章环境搭建开始,逐步深入到编译、链接、运行和性能剖析。
- 重视每章练习题:每章后的练习题尤其是贯穿各章的zlib库相关任务,是融会贯通知识的关键,务必动手完成。
- 配合GDB动手调试:第2章介绍的GDB调试方法建议边学边练,在实际调试中加深对程序运行过程的理解。
- 重点研读第4、5章:链接与可执行文件、链接脚本与makefile是工程实践的核心,值得反复阅读和实践。
- 综合实例作为检验:第8章综合实例是对全书知识的综合运用,建议在学完前面章节后认真研读并尝试复现。
- 完整编译链接知识体系:掌握从C源代码到可执行文件的预处理、编译、汇编、链接全过程及其底层原理。
- GCC与GDB实战能力:熟练使用GCC编译选项和GDB调试工具,能够独立解决编译和调试中的常见问题。
- 系统级编程视角:理解可执行文件在Linux系统中运行时的进程管理、库调用和异常行为,建立系统观。
- 性能剖析技能:掌握valgrind、perf等性能剖析工具的使用方法,能够定位程序性能瓶颈。
- 工程方案设计能力:通过zlib库旁路到FPGA加速卡的综合实例,学会从工程需求出发设计方案并实现。
📖 书籍简介
编辑推荐
观察从C程序到可执行文件,以及在系统中运行的全过程。
内容简介
《Linux GNU C 程序观察》所讨论的内容是“C语言程序设计”类课程的后续知识,涉及C程序在Linux环境下经过GCC编译/链接生成可执行文件以及在系统中运行的问题。《Linux GNU C 程序观察》能使读者在面对C程序的工程实践问题时,做到心中有数、处处不存疑。
全书共7章,第1章介绍环境准备,第2章介绍C程序的预处理、编译、汇编和链接的全过程,并介绍了一点关于GCC编译命令及编译选项、GDB调试初步概念,第3章专注于编译环节,即从C到汇编的转换,第4章专注于链接过程,第5章介绍可执行文件在系统中运行时,观察进程与系统的关系、进程对库的调用、程序异常行为等问题,第6、7章介绍一些性能剖析方法,包括GCC自带工具、库函数打桩方法、valgrind及perf工具的简单使用等,第8章介绍一个综合性的实例,即如何将HDFS文件系统使用的gzip压缩,从利用zlib库在CPU上计算转换成利用FPGA加速卡的过程。该实例涉及库的使用和修改、makefile以及相应的C程序实现等多方面知识,让读者从一个工程需求的角度考察其方案与实现。每章后面都有一些练习题,其中有一个与zlib库相关的任务贯穿了各章,读者通过这个连贯的练习将各章知识融会贯通。
《Linux GNU C 程序观察》可以作为计算机及相关专业高年级本科生或研究生学习Linux环境下的C程序设计教学用书,对希望深入了解Linux内核的读者和相关开发人员也非常有参考价值。
作者简介
深圳大学计算机与软件学院副教授,广东省国产高性能计算系统工程技术研究中心副主任、深圳市服务计算与应用重点实验室常务副主任,长期从事高性能计算研究。华中科技大学计算机科学与技术博士学位。著《OpenMP编译原理及实现技术》《Linux技术内幕》《操作系统之编程观察》译《Intel Parallel Studio环境下的并行程序设计》。发表论文40多篇(含SCI/EI索引多篇),承担和参与国家、省、市科研项目多项,2009-2010年参与基于龙芯3多核处理器的万亿次个人高性能计算机KD-60研制2011~2012年参与基于龙芯3号8核处理器的普及型高性能计算机KD-90研制,上述成果通过安徽省科技厅鉴定。2004-今,深圳大学计算机与软件学院从事科研与教学工作,本科及研究生课程:《操作系统》《现代操作系统》《操作系统课程设计》《计算机体系结构》《Intel并行编程工具》等。
前言/序言
我们在当前的c语言程序设计教学工作中,对c语言的语法和编程技术虽然都已经讨论得非常充分,但是作为计算机的“系统观”的建立,只能说仅完成了一半的任务。从C语言如何转换到汇编语言进而生成机器码形式的可执行文件,以及可执行文件如何装入内存并在操作系统环境中运行的细节,对大多数完成本科课程学习的学生而言,仍未达到解惑的程度。学生也许可以通过在网络上找到的业界大牛们提供的零散材料,自行建立起相应的认识,但这毕竟是一个耗时和低效的学习过程。
本书希望将上述知识,组织成一个相对完整、便于学习与实践的材料,在计算机系统课程学习中(例如深圳大学的“计算机系统2”)作为实验补充材料,让学生全面接触从C语言转换到汇编、进而生成机器码形式的可执行文件直至运行的全过程。在这种学习安排下,即使学生未修学编译原理课程,也能大致理解编译过程所使用的代码转换模板、链接中的符号解析和重定位等知识。除此之外,本书也介绍了程序在系统中运行的各种行为、代码调试和性能剖析工具的使用,对程序生成过程和运行过程都进行细致的观察——类似于电路与系统课程使用的万用表、示波器和频谱仪。有了这些“测量工具”后,C语言的实验教学才能从当前的”犹抱琵琶半遮面”的境况,变得相对完整起来。
📑 章节目录
- 第1章 实验环境构建
- 第2章 程序编译与运行
- 第3章 数据、运算与控制
- 第4章 链接与可执行文件
- 第5章 链接脚本与makefile
- 第6章 程序运行
- 第7章 性能剖析
- 第8章 综合实例:HDFS中实现zlib库的旁路