02第02章 Linux下C语言开发工具
Linux系统C语言开发工具
➢ 使用 -c 选项编译生成目标文件;然后链接目标文件,生成可执行文件 ➢ 链接时,链接器在a.o中找到变量a和函数PrintA
13
3.2 编译C语言程序
3.2.2 gcc编译流程 gcc编译流程如下图所示:
源代码(*.c文件)
预处理(Pre-processing)
例3.1 编写一个简单的C语言程序,在屏幕上打印5行 “Hello, Linux World”(续)
6
3.1 第一个Linux环境下的C语言程序
例3.1 编写一个简单的C语言程序,在屏幕上打印5行 “Hello, Linux World”(续)
7
3.2 编译C语言程序
3.2.1 gcc编译器
gcc编译器是Linux平台上应用最广泛的C编译器;g++编译器用于编译 C++程序,但是g++内部还是调用了gcc
执行gcc命令时,它将完成“预处理”、“编译”、“汇编”、“链 接”4个步骤,并生成可执行代码。
gcc命令可以接受多种文件类型,并依据用户指定的命令行参数做出处 理
后缀名 对应的语言
生成二进制文件.o
链接(Linking),选项-o 链接生成可执行文件
9
3.2 编译C语言程序
3.2.1 gcc编译器
gcc命令的使用格式:
gcc [options] filename-list
options常用选项有:
-ansi -c -g -l 库文件名 -m 类型 -o 文件名 -O [级别] -pg -S
15
3.2 编译C语言程序
3.2.2 gcc编译流程(续) 预处理/预编译:(续) 文件包含
第2章_嵌入式Linux_C语言开发工具
4、make dist 当我们做好了一切工作,最后一步是压 缩文档以供发布: [root@localhost hello]# make dist [root@localhost hello]# ls hello1.0.tar.gz hello-1.0.tar.gz hello-1.0-tar.gz就是我们最终要发布 的压缩文件。autoTools的整个流程都 介绍完毕,现实中更多会用到 autoTools来为我们生成makefile文 档。
2.6.2 使用autotools所生成的 makefile
产生了makefile后我们就要使用make工程 管理器去实现makefile的制定。 1、make make默认执行make all命令,如果之前 makefile操作无误,那么执行make命令会 出现上面这段执行内容,而且会在目录下生成 hello可执行文件,运行hello程序: [root@localhost hello]# ./hello Hello,Make!
2.4.1 gdb使用流程 2.4.2 gdb基本命令 2.4.3 gdbserver远程调试
2.5 make工程管理器
前面几节讲解了如何在嵌入式Linux 下使用编辑器编写代码,如何使用GCC 把代码编译成可执行文件,以及如何使 用GDB进行本地和远程调试程序,所有 的工作看似已经完成,为什么还需要 make这个工程管理器呢?
用autotools生产makefile的 主要步骤
1、开发人员要书写的文件主要是configure.in 和makefile.am 2、运行autoscan检测源文件生成 configure.scan,并修改成configure.in 3、编辑configure.in 4、由aclocal命令生成aclocal.m4 5、运行autoconf生成configure脚本 6、运行autoheader生成configure.h.in文件 7、创建并编辑makefile.am 8、运行automake生成makefile.in 9、运行configure脚本生成makefile
第2章 嵌入式linux C语言开发工具
21
2.3.3 gcc的常用编译选项
(2)库相关选项
选 项 -static -shared 含 义 进行静态编译,即链接静态库,禁止链接动态库 1.可以生成动态库文件 2.进行动态编译,尽可能地链接动态库,只有当没有动态库时才会链 接同名的静态库(默认选项,即可省略)
-L dir -lname
在库文件的搜索路径列表中添加dir目录 链接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个 库都存在,则根据编译方式(-static还是-shared)而进行链接 生成使用相对地址的位置无关的目标代码(Position Independent Code)。 然后通常使用gcc的-static选项从该PIC目标文件生成动态库文件。
C语言最早是由贝尔实验室的Dennis Ritchie为了 UNIX的辅助开发而编写的,它是在B语言的基础 上开发出来的。尽管C语言不是专门针对UNIX操 作系统或机器编写的,但它与UNIX系统的关系十 分紧密。由于它的硬件无关性和可移植性,使C语 言逐渐成为世界上使用最广泛计算机语言。
3
2.1 嵌入式Linux下C语言概述
编译链接器
调试器
项目管理器
项目管理器make
5
2.2 编辑器vim
2.2.1 vi的基本模式 2.2.2 vi的基本操作
6
2.2.1 vi的基本模式
标准模式(Normal mode)
通常进入vim后默认处于标准模式(或者称为命令模式)。在此模 式下任何键盘的输入都是作为命令来对待。命令的输入通常是不回 显的,只显示执行的结果。 用户只有在插入模式下才可以进行字符输入,用户按[Esc]键可回 到命令行模式下。 在此模式下,用户可以将文件保存或退出vim,也可以设置编辑环 境,如寻找字符串、列出行号等。 在此模式下,通过移动光标选择文本,选中的文本将反白显示,这 样提供高效、直观的编辑功能。用户按下ESC键可回到命令行模式 。
实验三linux环境C语言开发工具.
11
vi编辑器的三种模式切换
• 六种进入方式
– – – – – – i I a A o O 在光标左侧输入正文 在光标所在行的行首输入正文 在光标右侧输入正文 在光标所在行的末尾输入正文 在光标所在行的下面增加新行,并在新行的行首输入正文 在光标所在行的上面增加新行,并在新行的行首输入正文
12
vi编辑器的三种模式
实验三 linux环境C语言开发工具
一、实验目的: 1、 掌握VI(VIM)的使用方法; 2、 掌握嵌入式C语言的编译方法; 3、 掌握程序的调试和执行方法。
1
实验三 linux环境C语言开发工具
二、实验要求:
1、认真阅读电子版教材,学习VI的使用方法;
2、用Vi编写一简单C语言程序;
3、编程C语言程序;
19
GCC编译器介绍
文件后缀
.c .a .C;cc;.cxx
说明
C语言源程序 由目标文件构成的档案库文件 C++源程序
.h
.i .ii .m .o .s .S
源程序包含的头文件
经过预处理的C程序 经过预处理的C++程序 Objective-C源程序 编译后的目标文件 汇编语言源程序 经过预编译的汇编程序
4、调试和运行C语言程序;
5、书写实验报告。
2
三、实验原理
vi 是 Linux 系统中的全屏幕文本编辑器,是最常用的 文本编辑工具软件之一。 vi 是字符界面下最常用的编辑工 具,其功能强大,占用资源少,但不支持鼠标操作。现在 出现了图形界面下的 vi ,称为 VIM ,启动菜单选项为“开 始→应用程序→实用工具→ VIM 编辑器”,支持鼠标操作, 有类似其他软件的菜单和快捷按钮。字符界面下 vi 的操作 规则可以用在图形界面下的 VIM 中,本书主要介绍字符界 面的vi。
简单介绍Linux下的C语言编程_华清远见
简单介绍Linux下的C语言编程学习Linux必不可少的就是学习C语言,本篇文章就是给大家简单介绍一下Linux下的C语言编程,相信看完后对你有很多帮助。
Linux下的C语言程序设计与在其他环境中的C程序设计一样,主要涉及到编辑器、编译链接器、调试器及项目管理工具。
本篇内容属于华清远见嵌入式学院<嵌入式工程师职业培训班>一期课程中linux操作系统中的部分内容,这里我们先对这4种工具进行介绍。
(1)编辑器Linux下的编辑器就如Windows下的word、记事本等一样,完成对所录入文字的编辑功能。
Linux中最常用的编辑器有Vi(Vim)和Emacs,它们功能强大,使用方便,广受编程爱好者的喜爱。
(2)编译链接器编译是指源代码转化生成可执行代码的过程,它所完成工作主要如上图所示。
可见,在编译过程是非常复杂的,它包括词法、语法和语义的分析、中间代码的生成和优化、符号表的管理和出错处理等。
在Linux中,最常用的编译器是Gcc编译器。
它是GNU推出的功能强大、性能优越的多平台编译器,其执行效率与一般的编译器相比平均效率要高20%~30%,堪称为GNU的代表作品之一。
(3)调试器调试器并不是代码执行的必备工具,而是专为程序员方便调试程序而用的。
有编程经验的读者都知道,在编程的过程当中,往往调试所消耗的时间远远大于编写代码的时间。
因此,有一个功能强大、使用方便的调试器是必不可少的。
Gdb是绝大多数Linux开发人员所使用的调试器,它可以方便地设置断点、单步跟踪等,足以满足开发人员的需要。
(4)项目管理器Linux中的项目管理器“make”有些类似于Windows中Visual C++里的“工程”,它是一种控制编译或者重复编译软件的工具,另外,它还能自动管理软件编译的内容、方式和时机,使程序员能够把精力集中在代码的编写上而不是在源代码的组织上。
以上内容主要就是简单介绍Linux下的C语言编程。
Linux C语言开发工具
– 布局控制:#progma功能因后面的参数不同而不同,例如 使用#progma pack(1)可以内存变量的1个字节对齐,使得结构变量的成员分配到连续 的内存块,等价于__attribute__((packed))。
9
GCC
• GCC又是一个交叉平台编译器,支持的硬件 平台很多,如alpha、arm、avr、hppa、i386 、m68k、mips、powerpc、sparc、vxworks、 x86_64、MS Windows、OS/2等等。它能够在 当前CPU平台上为多种不同体系结构的硬件 平台开发软件,因此尤其适合在嵌入式领域 的开发编译。
8
GNU Tools—gcc
• gcc是一个强大的工具集合,它包含了预处 理器(cpp)、编译器(cc)、汇编器(as) 、链接 器(ld)等组件。它会在需要的时候调用其他 组件。输入文件的类型和传递给gcc的参数 决定了gcc调用具体的哪些组件。
• 对于开发者,它提供的足够多的参数,可以 让开发者全面控制代码的生成,这对嵌入式 系统级的软件开发非常重要。
2. 被多个应用程序共享时,在内存中只有一份拷贝, 因而更加节省内存
3. 可以在多种编程语言之间共享代码
静态库与动态库
33
如何使用静态库
// hello.h #ifndef HELLO_H #define HELLO_H void hello(char *name); #endif // hello.c #include <stdio.h> void hello(char *name) {
Linux程序设计基础—C环境(gcc gdb makefile)
博创科技 嵌入互动
Linux程序需要首先转化为低级机器语言即所谓的二进制代码 以后,才能被操作系统执行。 例如编程时,先用普通的编程语言生成一系列指令,这些 指令可被翻译为适当的可执行应用程序的二进制代码。这 个翻译过程可由解释器一步步来完成,或者也可以立即由 编译器明确地完成。 shell编程语言如BASH、TCSH、GAWK、Perl、Tcl和Tk都利 用自己的解释器。用这些语言编制的程序尽管是应用程序文 件,但可以直接运行。编译器则不同,它将生成一个独立的 二进制代码文件然后才可以运行。
© 2006 博创科技
博创科技 嵌入互动
GNU风格 (2/2)
当一个if中嵌套了另一个if-else时,应用花括号把if-else括起来。 要在同一个声明中同时说明结构标识和变量或者结构标识和类型定义 (typedef)。先定义变量,再使用。 尽量避免在if的条件中进行赋值。 请在名字中使用下划线以分割单词,尽量使用小写;把大写字母留给宏和 枚举常量,以及根据统一惯例使用的前缀。例如,应该使用类似 ignore_space_change_flag的名字;不要使用类似iCantReadThis的名字。 用于表明一个命令行选项是否给出的变量应该在选项含义的说明之后,而 不是选项字符之后被命名。
博创科技 嵌入互动
命令模式
4、复制和移动 yy 复制当前行到内存缓冲区 nyy 复制 n 行内容到内存缓冲区 y与光标移动的组合 p 将缓冲区的内容粘贴到光标的后面 P 将缓冲区的内容粘贴到光标的前面 另:在末行模式下实现移动 :n1,n2 m n3 : 把 n1到n2 行内容搬到第 n3 行后
© 2006 博创科技
© 2006 博创科技
博创科技 嵌入互动
linux下c语言编程环境的工具
Linux下C语言编程环境的工具要想在Linux下进行C语言编程,首先得搭建好一个编程环境。
这里分别说明一下几个非常有用的软件包。
如果你对Linux下软件安装方法还不清楚,请参考文章“Linux下软件安装方法总结”/5444771.html1、gcc要进行C语言编程,首先得有个C语言的编译器,Linux下常用的是GNU C Compiler gcc。
软件包的信息如下:Package: gccPriority: optionalSection: develInstalled-Size: 64Maintainer:UbuntuCoreDevelopers<*************************.com>Original-Maintainer:DebianGCCMaintainers<***********************.org>Architecture: i386Source: gcc-defaults (1.41ubuntu3)Version: 4:4.1.1-6ubuntu3Provides: c-compilerDepends: cpp (>= 4:4.1.1-6ubuntu3), gcc-4.1 (>= 4.1.1-2)Recommends: libc6-dev | libc-devSuggests: make, manpages-dev, autoconf, automake1.9, libtool, flex, bison, gdb, gcc-doc Conflicts: gcc-doc (<< 1:2.95.3)Filename: pool/main/g/gcc-defaults/gcc_4.1.1-6ubuntu3_i386.debSize: 5148MD5sum: 50de0a13f56c9ac41f85ea7fcabde0b2SHA1: c29cc1ea61d536d8ecb024fac83222c935a2703eSHA256: 65103d0dbc2c7508184ac177a8ea5eb90a82d873b0fb7fd65b9764b691673708Description: The GNU C compilerThis is the GNU C compiler, a fairly portable optimizing compiler for C..This is a dependency package providing the default GNU C compiler.Bugs:mailto:*************************.comOrigin: UbuntuTask: ubuntu-desktop, kubuntu-desktop, xubuntu-desktop我们从上面可以看出这个gcc软件是用来提供默认值的。
Linux下C编程
Linux下C编程第⼆章Linux 系统下C语⾔程序设计⽬前L inux 已经被⼴泛的使⽤,因此有必要简单介绍⼀下,在L inux 系统下如何进⾏C 语⾔程序设计。
⾸先介绍在Linux 下如何编辑C 语⾔源程序,接下来介绍如何编译C 语⾔源程序,最好介绍如何调试与运⾏C语⾔源程序。
由于不是所有⽤户的L inux 系统中都安装了G CC 系统,因此有必要先介绍⼀下G CC 的安装。
2.1 GCC 的安装Linux 与U nix 类似,完全由C语⾔编写⽽成,因此天⽣的⽀持C语⾔。
在⽬前主流的Linux 发⾏版本中都包含了G NU 的C语⾔编译器(简称G NU C,或称为G CC)。
如果当前的L inux 系统中没有安装G CC,可以访问下⾯的站点搜索所需的安装⽂件:/doc/df843113a2161479171128be.html /或直接访问ftp:///doc/df843113a2161479171128be.html /gcc 然后进⾏安装即可。
在安装之前,需要下载G CC 编译器、所需的库⽂件和联机帮助⽂件,这些⽂件⼀般以压缩⽂件格式(.tar 或.zip)提供,需要解压缩后使⽤。
⽬前GCC 的版本为3.2.2,下载其相关的⽂件即可。
根据具体的情况,安装G CC 有如下三种⽅法:1) 升级现有L inux 系统:适⽤于具有L inux 安装光盘,但是当前的系统没有安装G CC系统。
2) 通过R PM 安装:适⽤于具有L inux 安装光盘,并且包含相关的安装⽂件。
3) 从I nternet 下载:适⽤于没有L inux 安装光盘,但是可以接⼊互联⽹(WWW)。
第⼀种⽅法基本上是升级当前的L inux 系统,因此需要如下的步骤:1) 备份当前系统的重要⽂件;2) 插⼊L inux 安装光盘。
执⾏系统安装。
⽐较简单的⽅式是从光盘引导系统;3) 选择常规模式,并进⼊安装过程;4) 选择升级模式;5) 选择相关的升级包,主要包括Develpoment/Debuggers、Develpoment/Languages、Develpoment\Libraries、Develpoment\Tools;6) 等待安装结束即可。
linux c语言开发实例
linux c语言开发实例Linux C语言开发实例Linux C语言开发是一种常见的开发方式,它能够为Linux操作系统编写高效的、可靠的和安全的应用程序。
通过使用C语言进行Linux开发,我们可以充分利用Linux操作系统的优势,从而创建出功能丰富且高性能的软件。
本文将以Linux C语言开发实例为主题,介绍一些常见的Linux C语言开发实例,帮助读者了解并掌握如何使用C语言进行Linux开发。
一、Linux C语言开发环境搭建首先,我们需要搭建Linux C语言开发环境。
在大多数Linux发行版中,C语言编译器已经预装在系统中,因此我们只需要使用以下命令安装所需的开发工具:sudo apt-get install build-essential这个命令会自动安装GCC编译器和其他必要的开发工具,如make和g++。
安装完成后,我们就可以开始编写C语言代码并进行Linux开发了。
二、Linux C语言开发示例1. 创建一个Hello World程序我们可以从创建一个简单的Hello World程序开始,这是每个新手学习C 语言的第一个例子。
打开一个文本编辑器,输入以下代码:c#include <stdio.h>int main(){printf("Hello World\n");return 0;}保存文件为hello.c。
接下来,我们需要通过命令行编译这个程序。
打开终端,输入以下命令:gcc -o hello hello.c这个命令将会使用GCC编译器将代码编译成可执行文件。
编译成功后,我们可以使用以下命令运行程序:./hello如果一切顺利,你将在终端中看到输出的"Hello World"。
2. 读写文件Linux C语言开发的另一个常见需求是文件操作。
我们可以使用C语言的标准文件操作函数来读取和写入文件。
c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000int main(){FILE *fp;char str[MAX_SIZE];打开文件fp = fopen("example.txt", "r");if (fp == NULL){printf("无法打开文件!\n");exit(1);}从文件中读取内容fgets(str, MAX_SIZE, fp);printf("文件内容:s", str);关闭文件fclose(fp);return 0;}上述代码将打开名为example.txt的文件,并从文件中读取内容。
实验三linux环境C语言开发工具
27
编译器GCC的使用
3、-c选项,只编译,不汇编连接:gcc -c hello.c -c意思就是Compile,产生一个叫hello.o的目标文档
28
编译器GCC的使用
4、-S选项,产生汇编源文档: 例:gcc -S hello.c -S意思就是aSsemble,产生一个叫hello.s的汇编源文档
-E
-g -o file -v -I dir -L dir
只进行预编译,不做其他处理
在可执行程序中包含标准调试信息 把输出文件输出到file里 打印出编译器内部编译各过程的命令行信息和编译器的版本 在头文件的搜索路径列表中添加dir目录 在库文件的搜索路径列表中添加dir目录
-static
-l library
常用格式: 或: 或: gcc gcc gcc C源文件 -o 目标文件名 -o 目标文件名 C源文件
C源文件
23
编译器GCC的使用
• GCC编译选项
编译选项有总体选项、告警和出错选项、优化选项和体系结构相关选项。
后 缀 名 -c -S 所对应的语言 只是编译不链接,生成目标文件“.o” 只是编译不汇编,生成汇编代码
预处理器
编译器
汇编器
连接器
21
gcc编译的4个过程:
• 预处理(也称预编译,Preprocessing): – 命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件 中的文件包含(include)、预编译语句(如宏定义define等)进行分析。 • 编译(Compilation): – 接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目 标文件。 • 汇编(Assembly): – 汇编过程是针对汇编语言的步骤,调用as进行工作。 • 连接(Linking): – 当所有的目标文件都生成之后,gcc就调用 ld来完成最后的关键性 工作,这个阶段就是连接
02第02章Linux下C语言开发工具
10
Linux高级程序设计(第2版)
第2章 Linux下C语言开发工具
1
常用编辑工具
2
GCC编译工具
3
Make工具与Makefile文件
4
常用调试工具
5
Linux库文件使用与创建
6
Autoconf/Automake自动化工具
2019/7/26
人民邮电出版社出版 杨宗德编著
11
Linux高级程序设计(第2版)
Makefile优点
• 利用Make工具,可以将大型的开发项目分解成为多个更易于 管理的模块,对于一个包括几百个源文件的应用程序而言,使 用make工具和makefile文件可以清晰地理顺各个源文件之间的 关系。
2019/7/26
人民邮电出版社出版 杨宗德编著
12
Makefile示例
Linux高级程序设计(第2版)
2019/7/26
人民邮电出版社出版 杨宗德编著
18
Linux高级程序设计(第2版)
第2章 Linux下C语言开发工具
常用编辑工具
2
GCC编译工具
3
Make工具与Makefile文件
4
常用调试工具
5
Linux库文件使用与创建
6
Autoconf/Automake自动化工具
2019/7/26
人民邮电出版社出版 杨宗德编著
人民邮电出版社出版 杨宗德编著
16
GDB示例
• 见教材。
Linux高级程序设计(第2版)
2019/7/26
人民邮电出版社出版 杨宗德编著
17
Linux高级程序设计(第2版)
strace
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010-8-30
人民邮电出版社出版 杨宗德编著
5
Linux高级程序设计(第2版)
第2章
1 2 3 4 5 6
Linux下C语言开发工具
常用编辑工具 GCC编译工具 编译工具 Make工具与 工具与Makefile文件 工具与 文件 常用调试工具 Linux库文件使用与创建 库文件使用与创建 Autoconf/Automake自动化工具 自动化工具
Linux高级程序设计(第2版)
VIM编辑器
2010-8-30
人民邮电出版社出版 杨宗德编著
3
Linux高级程序设计(第2版)
配置文件
VIM的配置文件为“~/.vimrc”
cp /usr/share/vim/vim61/vimrc_example ~/.vimrc 添加内容到配置文件~/.vimrc中
Linux高级程序设计(第2版)
Linux库文件管理方式
静态库。在Linux中,以.a为后缀,如libtest.a。应用程序从静 态库中直接拷贝函数到二进制映像文件。 共享库,在Linux操作系统中,以libxxx.so.x.x为格式命名。可 执行文件在运行时将函数代码从共享库文件中读出,从而间接 引用。
2010-8-30
人民邮电出版社出版 杨宗德编著
20
Linux高级程序设计(第2版)
库函数基本路径
/lib: /usr/lib: /usr/local/lib: 系统必备共享库 标准共享库和静态库 本地函数库
2010-8-30
人民邮电出版社出版 杨宗德编著
21
Linux高级程序设计(第2版)
Linux高级程序设计(第2版)
Linux高级程序设计(第二版)
人民邮电出版社 出版 杨宗德 编著 2009年9月
Linux高级程序设计(第2版)
第2章
1 2 3 4 5 6
Linux下C语言开发工具
常用编辑工具 GCC编译工具 编译工具 Make工具与 工具与Makefile文件 工具与 文件 常用调试工具 Linux库文件使用与创建 库文件使用与创建 Autoconf/Automake自动化工具 自动化工具
人民邮电出版社出版 杨宗德编著
28
Linux高级程序设计(第2版)
构建共享库目标文件
2010-8-30
人民邮电出版社出版 杨宗德编著
29
Linux高级程序设计(第2版)
编译共享库并创建连接
2010-8-30
人民邮电出版社出版 杨宗德编著
30
Linux高级程序设计(第2版)
使用共享库
准备文件 – 头文件libhello.h:以知道有哪些函数,完成怎么样的功能, 返回值以及参数情况。 – 库文件libhello.so.1.0及其链接libhello.so:库函数的二进制 代码位置
2010-8-30
人民邮电出版社出版 杨宗德编著
34
Linux高级程序设计(第2版)
第2章
1 2 3 4 5 6
Linux下C语言开发工具
常用编辑工具 GCC编译工具 编译工具 Make工具与 工具与Makefile文件 工具与 文件 常用调试工具 Linux库文件使用与创建 库文件使用与创建 Autoconf/Automake自动化工具 自动化工具
2010-8-30
人民邮电出版社出版 杨宗德编著
4
Linux高级程序设计(第2版)
Source Insight工具
Source Insight是一个图形化的源代码查看工具(当然也可以 做为编辑工具),如果一个项目的源代码较多,此工具可以很 方便的查找出源代码之间的依赖关系,例如,某一个宏的定义 位置,某一个自定义的数据类型的原始定义。 应用编程所用的头文件(主要位于/usr/include目录下)下载到 Windows平台,从而建立各文件间的关联,以便查找各函数声 明,变量类型。
16
Linux高级程序设计(第2版)
GDB示例
见教材。
2010-8-30
人民邮电出版社出版 杨宗德编著
17
Linux高级程序设计(第2版)
strace
strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。常用的三个命令行参 数: – -f:除了跟踪当前进程外,还跟踪其子进程。 – -o file:将输出信息写到文件file中,而不是显示到标准错误 输出(stderr)。 – -p pid:绑定到一个由pid对应的正在运行的进程。此参数常 用来调试后台进程。
2010-8-30
人民邮电出版社出版 杨宗德编著
22
Linux高级程序设计(第2版)
ldd命令 --查看到某可执行程序库清单
2010-8-30
人民邮电出版社出版 杨宗德编著
23
Linux高级程序设计(第2版)
创建静态库
源文件信息。其中,“libhello.c”为要构建的库文件源文件, “libhello.h”为调用此库文件的头文件,“usehello.c”为测试程 序。 生成目标文件
26
Linux高级程序设计(第2版)
共享库创建
2010-8-30
人民邮电出版社出版 杨宗德编著
27
Linux高级程序设计(第2版)
共享库创建示例
查看源文件,“libhello.c”为要构建的库文件源文件, “libhello.h”为调用此库文件的头文件,“usehello.c”为测试程 序。
2010-8-30
2010-8-30
人民邮电出版社出版 杨宗德编著
18
Linux高级程序设计(第2版)
第2章
1 2 3 4 5 6
Linux下C语言开发工具
常用编辑工具 GCC编译工具 编译工具 Make工具与 工具与Makefile文件 工具与 文件 常用调试工具 Linux库文件使用与创建 库文件使用与创建 Autoconf/Automake自动化工具 自动化工具
Linux高级程序设计(第2版)
编译C到可执行文件过程
(1)预处理(也称预编译,Preprocessing):命令GCC首先调用 cpp进行预处理,在预处理过程中,对源代码文件中的文件包含、预 编译语句进行分析,使用-E参数。 (2)编译(Compilation):调用cc进行编译,这个阶段根据输入文 件生成以.s为后缀的汇编文件,使用-s参数。 (3)汇编(Assembly):汇编过程是针对汇编语言的步骤,调用 as进行工作,将.S和.s为后缀的汇编语言文件经过预编译和汇编成 以.o为后缀的目标文件,使用-c参数。 (4)连接(Linking):当所有的目标文件都生成之后,调用ld来完 成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目 标文件被安排到可执行程序中恰当的位置上,同时,该程序所调用 到的库函数也从各自所在的档案库中连到合适的地方,使用-o参数。
Linux高级程序设计(第2版)
GDB调试工具
完成如下的调试任务: – (1)设置断点。 – (2)监视程序变量的值。 – (3)程序的单步执行。 – (4)修改变量的值。
2010-8-30
人民邮电出版社出版 杨宗德编著
15
Linux高级程序设计(第2版)
GDB可用命令
2010-8-30
人民邮电出版社出版 杨宗德编著
人民邮电出版社出版 杨宗德编著
2010-8-30
7
Linux高级程序设计(第2版)
不同后缀所标识的程序语言及处理
2010-8-30
人民邮电出版社出版 杨宗德编著
8
Linux高级程序设计(第2版)
其它常用选项
-o output_filename:把文件输出到output_filename,这个名 称不能和源文件同名。如果不给文件名,GCC就将文件输出到 a.out。 -g:产生符号调试工具(GNU的Gdb)所必要的标准调试信息, 要想对源代码进行调试,就必须加入这个选项。 -O:对程序进行优化编译、连接。采用这个选项,整个源代码 会在编译、连接过程中进行优化处理,这样可以提高可执行文 件的执行效率,但是,编译、连接的速度就相应地要慢一些。 -O2:比-O的优化级别更高,能更好的优化编译、连接。但整 个编译、连接过程会更长。 -I dirname:在头文件的搜索路径列表中添加dirname目录,是 在预编译过程中使用的选项。 -L dirname:在库文件的搜索路径列表中添加dirname目录。
Linux高级程序设计(第2版)
自动创建Makefile文件流程
2010-8-30
人民邮电出版社出版 杨宗德编著
36
Linux高级程序设计(第2版)
示例
见教材。
2010-8-30
人民邮电出版社出版 杨宗德编著
37
2010-8-30
人民邮电出版社出版 杨宗德编著
31
Linux高级程序设计(第2版)
文件内容
2010-8-30
人民邮电出版社出版 杨宗德编著
32
Linux高级程序设计(第2版)
编译连接
2010-8-30
人民邮电出版社出版 杨宗德编著
33
Linux高级程序设计(第2版)
运行
如果希望在使用连接器时不使用-Ldirectory标识就可以查找到 该库,则可以采用以下方式之一: 把此库拷贝到/usr/lib或者/lib文件夹中,或者在此两个文件夹任 意一个中创建一个到该库的快捷方式,并命名为libname.so。 如果库所在路径没有在/usr/lib和/lib文件夹下,需要将该路径添 加到文件“/etc/ld.so.conf”中,每一行增加一个路径,完成以 上设置后,然后运行ldconfig命令更新库信息。
Makefile示例
2010-8-30