LINUX 高级程序设计—第二章 LINUX下C语言开发工具

合集下载

Linux下面如何进行C语言编程技术教程

Linux下面如何进行C语言编程技术教程

Linux下面如何进行C语言编程技术教程1、源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。

下面我们以一个实例来说明如何使用gcc编译器。

假设我们有下面一个非常简单的源程序(hello.c):int main(int argc,char **argv){printf("Hello Linux\n");}要编译这个程序,我们只要在命令行下执行:gcc -o hello hello.cgcc 编译器就会为我们生成一个hello的可执行文件,执行./hello就可以看到程序的输出结果了。

命令行中gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件。

gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了,-o选项我们已经知道了,表示我们要求输出的可执行文件名。

-c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。

-g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。

知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明。

2、Makefile的编写假设我们有下面这样的一个程序,源代码如下:/* main.c */#include "mytool1.h"#include "mytool2.h"int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#endif/* mytool1.c */#include "mytool1.h"void mytool1_print(char *print_str){printf("This is mytool1 print %s\n",print_str);}/* mytool2.h */#ifndef _MYTOOL_2_H#define _MYTOOL_2_Hvoid mytool2_print(char *print_str);#endif/* mytool2.c */#include "mytool2.h"void mytool2_print(char *print_str){printf("This is mytool2 print %s\n",print_str);}当然由于这个程序是很短的我们可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦,但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?写一个SHELL脚本,让她帮我去完成不就可以了。

Linux下C编程

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语言开发工具
3.2.1 gcc编译器 例:选项 -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编译流程(续) 预处理/预编译:(续) 文件包含

linux编写c程序

linux编写c程序

linux编写c程序
在Linux环境下编写C程序需要以下步骤:
1. 安装C编译器:Linux操作系统上常用的C编译器有GCC和Clang。

如果未安装,可以使用以下命令进行安装:shell复制代码:
sudo apt-get update
sudo apt-get install build-essential
2. 创建C源文件:使用文本编辑器(如Vim、Nano)创建一个以“.c”为后缀的C源文件,例如“hello.c”。

3. 编写C程序:使用C语言的语法规则编写程序,并保存在C源文件中。

c复制代码:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
4. 编译C程序:在终端中使用C编译器将C源文件编译成可执行文件。

假设源文件名为“hello.c”,可以使用以下命令进行编译:
shell复制代码:
gcc -o hello hello.c
该命令将会编译“hello.c”文件,并将可执行文件输出为“hello”。

5. 运行C程序:在终端中输入可执行文件的名称(即编译命令中的输出文件名)即可运行程序。

shell复制代码:
./hello
以上步骤是Linux环境下编写和运行C程序的基本流程。

具体细节可能会因操作系统和编译器版本而有所不同。

3--Linux下C语言编程

3--Linux下C语言编程

movl $.LC0, (%esp) call puts movl $0, %eax leave ret .size main, .-main .ident"GCC: (Ubuntu 4.4.1-4ubuntu8) 4.4.1" .section .note.GNUstack,"",@progbits
/* pow_test.c */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { unsigned int x, y; unsigned long long res; if ((argc < 3) || (sscanf(argv[1], || (sscanf(argv[2], "%u", &y)) != 1) { printf("Usage: pow base exponent\n"); exit(1); } res = unsgn_pow(x, y); printf("%u ^ %u = %u\n", x, y, res); exit(0);
汇编阶段
• 汇编阶段,汇编生成目标文件.o,但是没有经过 链接,所以丌是可执行文件。在此可使用选项“c”就可看到汇编代码已转化为“.o”的二迚制目 标代码了。 • [root@localhost gcc]# gcc –c hello.s –o hello.o
链接阶段
• hello.c中调用printf函数,预处理包含迚来的 stdio.h也只有对printf函数的声明,没有该函数的 实现,那printf函数的实现在哪里? • printf函数的实现被做到了libc.so.6库函数中了。 • 没有特别指定时,gcc会到系统默认的搜索路径 “/usr/lib”下查找,也就是链接到libc.so.6库函 数中去,也即实现了printf函数,=>链接的作用。

第2章_嵌入式Linux_C语言开发工具

第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 编程基础PPT课件

第2章 Linux 下C 编程基础PPT课件
或 gcc –I include -c include-test.c
问题:如果源文件中使用#include “include/include-test.h” 或#include “/root/test/include/include-test.h”,则编译命令gcc如何写?
Page 16
2020/11/6
出现了许多C语言版本。由于没有统一的 标准,使得这些C语言之间出现了一些不 一致的地方。为了改变这种情况,美国国 家标准研究所(ANSI)为C语言制定了一套 ANSI标准,成为现行的标准C语言的主要 特点 。
Page 5
2020/11/6
2.1 C语言简单回顾
1990年,国际化标准组织ISO( Intrernational Standard Organization)接受 了87 ANSI C为ISO C 的标准(ISO98991990)。
2.2 Linux程序设计基础知识
inux常用头文件如下所示:
Page 17
2020/11/6
2.2 Linux程序设计基础知识
2.2.3库文件
库文件是一些预先编译好的函数的集合, 这些函数都是按照可再使用的原则编写的。这 些函数通常由一组相互关联的用来完成某项常 见工作的函数构成。
1994年,ISO修订了C语言的标准。目 前流行的C语言编译系统大多是以ANSI C 为基础进行开发的,但不同版本的C编译 系统说实现的语言功能和语法规则有略有 差别。
Page 6
2020/11/6
2.1 C语言简单回顾
C语言具有绘图能力强,可移植性, 并具备很强的数据处理能力,因此适于编 写系统软件,三维,二维图形和动画,它 是数值计算的高级语言。由于它的硬件无 关性和可移植性,使得C语言逐渐成为世 界上使用最广泛的语言。

Linux系统下C语言编程及技巧研究

Linux系统下C语言编程及技巧研究

Linux系统下C语言编程及技巧研究Linux是一种自由和开放源代码的类Unix操作系统,广泛用于服务器领域。

同时,Linux系统也是许多开发者和程序员首选的开发环境。

因此,掌握在Linux系统下C语言编程及技巧非常重要。

本文将重点介绍在Linux下进行C语言编程的一些技巧和要点。

1. GNU编译器工具集(GCC)GCC是 GNU编译器工具集的简称,支持多种编程语言,如C、C++、Objective-C、Java等。

在Linux系统下,GCC是编译C程序的主要工具。

开发者可以通过命令行或集成式开发环境(IDE)使用GCC。

2. 环境变量环境变量是Linux系统的重要概念,能够帮助开发者方便地访问系统资源和软件库。

开发者可以通过设置环境变量,指定GCC的默认搜索路径和库路径。

例如,下列命令可将环境变量C_INCLUDE_PATH设置为当前目录:export C_INCLUDE_PATH=.3. 头文件头文件在C语言程序的编写过程中是非常重要的。

Linux系统提供了许多C语言头文件,例如stdio.h、stdlib.h等。

开发者也可以根据需求编写自己的头文件。

在编写程序时,一定要正确地包含头文件。

否则编译器将无法识别预定义的类型和函数。

例如,下列程序演示了如何使用stdio.h头文件中的printf函数:4. 动态链接库动态链接库(Dynamic Linking Libraries,DLL)提供了跨多个程序共享函数和代码的能力。

在Linux系统下,动态链接库通常以.so文件形式出现。

开发者可以通过指定链接器选项使用动态链接库。

例如,下列命令将可执行文件myprog连接到数学库libm.so:gcc -o myprog myprog.c -lm5. 调试器调试器是程序员的重要工具。

调试器能够帮助开发者在程序崩溃或产生错误时追踪问题。

在Linux系统下,调试器gdb(GNU调试器)是普遍使用的工具。

例如,下列命令启动了gdb并加载了可执行文件:gdb ./myprog在gdb命令行下,可以执行多种命令来分析程序的行为,如查看变量的值、单步执行代码、设置断点等。

第2章 嵌入式linux C语言开发工具

第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语言开发工具

Linux C语言开发工具
– 条件编译:#if、#ifdef、#ifndef、#if defined、#endif、#undef等也是常用的 预处理,主要是在编译时进行选择性编译,有效地控制版本和编译范 围,防止对文件的重复包含等重要功能。
– 布局控制:#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) {

02第02章Linux下C语言开发工具

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

linux下c语言编程环境的工具

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环境(gcc gdb makefile)

Linux程序设计基础—C环境(gcc gdb makefile)
© 2006 博创科技
博创科技 嵌入互动
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 博创科技
博创科技 嵌入互动
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档