Linux + C - 程序语言的发展以及程序的基本组成 C语言开发环境 (必备内容)
* 什么是程序?
* 程序的作用是什么?
* 我们必须通过指令,指挥计算机执行我们想要它做的动作。
* 而依照顺序执行的一组指令就是程序。
** 程序的特征
1, 程序是与计算机沟通的语言
2, 程序是由特定语法与关键字构成
3, 程序是一行一行执行的
4, 程序的执行, 从入口点开始, 原则上是由上而下, 从左而右执行。
入口点可能是一个方法或者是函数。。。
** 程序语言的演化
1, 机器语言 -- 计算机通过电信号模式 0/1/0/1...开关开关...
2, 汇编语言
3, 高级语言
4, 第四代语言
5, 自然语言 -- 智能语言,开机,它就开机。关机,它就关机。
机器语言 :{
1, 是计算机唯一能够执行的语言。
2, 其他语言必须先转化为机器语言
3, 指令有 0 与 1 组成, 称为机器码。
4, 指令难记忆但执行速度最快。
5, 不同类型机器有不同的机器码, 不具备移植性。
}
高级语言 {
1, 离机器越来越远
2, 语法接近人类的自然语言
3, 执行的单位不是指令, 而是语句, 一行语句。
4, 开发效率越来越高。
5, 必须编译成机器码
6, 移植性比较好。
}
第四代语言 {
1, 4GL, 也称为面向问题的程序语言。
2, 仅需告诉计算机 "做什么", 不需要指挥计算机"如何做"
3, 大大提高开发效率
4, 如 SQL 语言及各种查询语言。
}
自然语言 {
1, 运用人工智能, 以接近口语的指令指挥计算机,如语音。
2, 还没有成熟。
}
编译 : {
1, 把源代码转化成机器码的过程。
2, 之前还会进行前期处理。 [对]
3, 过程中会进行语法检查。
4, 编译器 : 完成编译动作的程序 [对]
连接 :
1, 将可执行文件与包含文件 / 用到的函数库建立关联的过程。
}
** 编译型语言与解释性语言 {
1, 编译型语言 :需要先经过编译和连接程序产生可执行文件的语言, 如 : java/C/C++等。
----> 开发人员编译连接
2, 解释型语言 : 不需要经过编译和连接的过程,直接在特定的程序或环境下可执行的语言,如 : JavaScript / Python 等。
----> 自动编译连接
}
*** 几个基本的概念
** 数据
* 是计算机程序处理的对象, 可以是整数, 实数, 字符, 也可以是图像, 声音等的编码表示。
** 数据结构
* 指的是数据与数据间存在一种或多种特定关系。
与数据结构密切相关的便是数据的类型和数据的存放。
** 程序设计
* 编写程序的过程。
** 软件
* 程序 + 文档。
**** 编程语言及 C 语言简介 {
C 语言简介 --> 具有强大的功能。 (Dennis Ritchie) 同时具有汇编语言和高级语言的优势。
* 汇编语言 --> B语言 --> C语言。
早unix (汇编), 后 (C语言改写) + 少量汇编。
Linux (C语言改写) + 少量汇编。
C语言现状 : 进行底层开发。
* Linux 内核开发
* 基于 Linux 嵌入式开发。
* 了解程序语言
* C 语言简介
* “Linux + C” 的方向。
概述
* Linux 和 C 天生有不解之源, Linux 的操作系统内核就主要是用 C 写的, 另外 Linux 下的
很多软件也是用 C 写的,特别是一些著名的服务软件, 如何 MySQL, Apache 等。
** 开发环境的构成
1, 编辑器 : 选择 VI
2, 编译器 : 选择 GNU C/C++ 编译器 gcc (免费开源的工具 - linux发型版本多数都自动安装)
3, 调试器 : 应用广泛的 gdb (JDK 学习的 GDB)
4, 函数库 : glibc
5, 系统头文件 : glibc_header
** 安装时要注意 :
* 在安装 Linux 是需要选上 "程序开发" 中的 "开发工具",就可以自动安装 gcc / gdb
* 若想开发图形界面, 还需选上 GNOME / KDE 软件开发。
** IDE
* Kylix : 号称 Linux 下的 dephi
* Kdevelop
* RHIDE : 类似与 Turbo C
** 编译器 : gcc
* gcc (GNU CCompiler) 是GNU推出的功能强大 , 性能优越的多平台编译器, gcc 编译器能将C , C++语言源程序
编译, 连接成可执行文件, 以下是 gcc 支持编译的一些源文件的后缀及其解释。
.c 为后缀的文件, C语言源代码文件
.h 为后缀的文件, 是程序所包含的头文件。
.i 为后缀的文件, 是已经预处理过的 C 源代码文件;
.s 为后缀的文件, 是汇编语言源代码文件。
.o 为后缀的文件, 是编译后的目标文件。
记忆 : CH + ISO
** gcc
* gcc -o hello hello.c
* 用 gcc 来编译我们的源程序
* -o 选项要求编译器给我们输出的可执行文件名为 hello
* hello.c 是我们的源程序文件。
* -c 选项 表示我们只要求编译器输出目标代码, 而不必要输出可执行文件
* -g 选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。
* 执行 ./hello 就可以看到程序的输出结构。 (在当前目录下去找)
** 函数库 :glibc
* 要构建一个完整的 C 开发环境, Glibc 是必不可少的, 它是 Linux 下 C 的主要函数库. Glibc 有两种安装方式:
A. 安装成测试用的函数库
在编译程序时用不同的选项来试用新的函数库。
B. 安装成主要的 C 函数库
所有新编译程序均用的函数库
* Glibc2 含几个附加包 : Linuxthreads, localedate 和 crypt, 通常他们的
文件名随版本的不同而类似于下列文件名 :
glibc-2.06.tar.gz
glibc-linuxthreads-2.0.6.tar.gz
glibc-localedate-2.0.6.tar.gz
glibc-crypt-2.0.6.tar.gz
* Glibc 是提供系统调用和基本函数的 C 库, 比如 open, malloc, printf 等等。
所有动态连接的程序都要用到它。
** 系统头文件 : glibc_header
* 缺少系统头文件,很多用到系统功能的C程序将无法编译。
* 如果用户在安装过程中少装了这些包,就会无法编译C程序,解决方法 :
* 方法一:不推荐:重装一遍Linux系统。
* 方法二:通过找一些Rpm包来迅速安装Linux的C开发环境。
*** C开发环境对应的rpm包:
* 由于gcc包需依赖 binutils和cpp包,另外make包也是在编译中常用的,所以一共需要8个包来完成安装,它们是:
* cpp-2.96-110.i386.rpm
binutils-2.11.93.0.2-11. i386.rpm
Glibc-2.2.5-31. i386.rpm
Glibc-kernheaders-2.4-7.14. i386.rpm
Glibc-common-2.2.5-34
Glibc-devel-2.2.5-34- i386.rpm
Gcc-2.96-110.i386.rpm
Make-3.79.1-8. i386.rpm
[注释:版本可能会变化。]
查看glibc的版本:ls /lib/libc-*
查看gcc版本号: gcc –version
** Linux下C程序开发过程:
* 使用VI等编辑工具编写源程序
* à保存为*.c
* à使用gcc编译成二进制可执行文件
* à./a.out执行
* à如果有问题可以使用gdb进行调试。
** C 程序的组成
* 对于一个 C 程序, 安装完成后可以分成三个组成 :
* 可执行文件
* 包含文件
* 库文件
* 可执行文件就是最终运行的命令, 包含文件是该 C 程序 include 的一些
定义文件, 库文件则是该 C 程序自定义的库。
* 比如用 RPM 安装的 Mysql 数据库 :
* 可执行文件放在 /usr/bin 下
* 包含文件放在 /usr/include/mysql 下
* 库文件在 /usr/lib/mysql 下
* 只有系统可以找到程序对应的包含文件和库文件, 程序可执行文件才能正常运行。 [对,理解]
小结
* 开发环境的构成
* GNU 的 gcc 编译器
* glibc {
glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。
glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。
由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。而就像其他的 UNIX 系统一样,
其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中,
其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。
}
* Linux 下 C 程序开发过程 * 第一个 C 程序 * C 程序结构