应用开发
前言
程序安装与配置
C程序开发
Java程序开发
Web开发
版本控制
一、程序的安装与配置
几乎对于所有的应用,在开发之前,都需要安装和配置相关程序,并在Linux系统中设置相关的环境变量。
安装程序与更新软件
- 软件包管理工具的作用是提供在操作系统中安装、升级、卸载所需软件的方法。
- 提供对系统中所有软件状态信息进行查询。
- 在GNU/Linux操作系统中,RPM和DPKG为最常见的两类软件包管理工具,它们分别应用于基于RPM软件包的Linux发行版本和基于DEB软件包的Linux发行版本。
- RPM- Red Hat Package Mananger
-
二进制文件,依赖库文件,配置文件等打包
RPM和DPKG两大阵营
-
基于 RPM 软件包的 Linux 发行版本, RHEL和CentOS默认包管理器
-
基于DEB 软件包的 Linux 发行版本,UBUNTU默认包管理器
RPM包管理
-
一个RPM包里面包含已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以.rpm扩展名结尾的文件,例如package.rpm。
-
RPM命令:
rpm -? package.rpm,其中-?为操作参数。 -
-i:在系统中安装软件
-
-U:在系统中升级软件
-
-e:在系统中卸载软件
-
-q:对RPM包进行查询,这些参数通常组合起来使用
-
常用的RPM包安装、升级、卸载和查询的命令:
- 安装rpm包:rpm -ivh mypackage.rpm
- 升级rpm包:rpm -Uvh mypackage.rpm
- 卸载rpm包:rpm -ev mypackage
- 查询已安装rpm包:rpm -qa|grep mypackage
RPM的缺点
- 软件包的依赖问题
- 原因:编译好的二进制文件需要重现编译环境才能正常安装
YUM包管理
- YUM是基于RPM的前端软件包管理工具。
- 几乎所有RedHat系列Linux都默认装有YUM
- Yellowdog Update Modified
- 能够从指定的源空间(服务器、本地目录等)中自动下载目标RPM包并且安装。
- 可以自动处理依赖性关系并进行下载和安装,无须繁琐地手动下载和安装每一个需要的依赖包。
- 可以对系统中所有软件进行升级。
管理
常用的命令:
-
安装rpm包:yum -y install mypackage.rpm
-
升级rpm包:yum update mypackage.rpm
-
卸载rpm包:yum remove mypackage.rpm
-
查询rpm包:yum list installed/available
-
查看rpm信息:yum info
-
Tips:
-
1.yum clean all 清除软件包原有缓存数据
-
- yum makecache 将当前服务器上软件包相关信息存储到本地以提高搜索的速度
-
基于 RPM 软件包的 Linux 发行版本,RedHat系列
-
于DEB 软件包的 Linux 发行版本,UBUNTU
(3)DEB包管理
- 一个DEB包里面包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以.deb扩展名结尾的文件,例如mypackage.deb。
- 常用命令:
- 查询系统中已安装的软件:dpkg -l mypackage
- 安装DEB包:sudo dpkg -i mypackage
- 卸载DEB包: #不卸载配置文件
- - - sudo dpkg –r mypackage
- - - #卸载配置文件
- - - sudo dpkg -P mypackage
APT包管理
- APT与 YUM对应,它最早被设计成DPKG的前端软件,现在通过apt-rpm也支持RPM管理。
- APT的主要包管理工具为APT-GET。
- 常用的APT命令:
- 更新源索引:sudo apt-get update
- 安装包:sudo apt-get install mypackage
- 下载指定源文件:sudo apt-get source mypackage
- 升级所有软件:sudo apt-get upgrade
- 卸载:sudo apt-get remove mypackage #不删配置文件
- sudo apt-get remove –purge mypackage #删配置文件
ALIEN工具
- ALIEN工具可以将RPM软件包转换成DEB软件包,或把DEB软件包转换成RPM软件包。
- 在Ubuntu中使用ALIEN将RPM转换为DEB并安装:
- 转换:sudo alien -d mypackage.rpm
- 安装:sudo dpkg -i mypackage.deb
在RHEL中使用ALIEN将DEB转换为RPM并安装: - 转换:sudo alien -r mypackage.deb
- 安装:sudo rpm -ivh mypackage.rpm
二、环境变量
- 环境变量和shell紧密相关,因为用户登录系统后就启动了一个shell。对于Linux来说通常这个shell是bash,但也可以重新设定或切换到其它shell。
- 根据发行版本的不同,bash 有两个基本的系统级配置文件:/etc/bashrc和/etc/profile。这些配置文件包含两组不同的变量:
- shell变量,只是在特定的 shell 中固定(如bash),是局部的。
- 环境变量,在不同 shell 中固定,是全局的。环境变量是通过shell命令来设置,设置好的环境变量又可以被所有当前用户所运行的程序所使用。
设置环境变量
- 对于bash这个shell程序:
- 可以通过变量名来访问相应的环境变量
- 通过export来设置环境变量
- 与环境变量相关的文件见下页
与环境变量相关的文件
环境变量设置方法
-
(1)使用命令echo显示环境变量
-
例:$ echo $HOME
-
(2)设置一个新的环境变量
-
例:$ export HELLO=“Hello!”
-
(3)使用env命令显示所有的环境变量
-
例: $ env
-
(4)使用set命令显示所有本地定义的 shell 变量
-
例:$ set
-
(5)使用unset命令来清除环境变量
-
例:$ unset $TEST #删除环境变量TEST
-
(6)使用readonly命令设置只读变量,注意:如果使用了readonly命令的话,变量就不可以被修改或清除了。
-
(7)使用命令echo显示环境变量
-
例: # 增加一个环境变量 TEST
-
$ export TEST="Test..."
-
#将环境变量TEST设为只读
-
$ readonly TEST
(8)通过修改环境变量定义文件来修改环境变量
注意:一般情况下,这仅仅对于普通用户适用;要尽量避免修改根用户的环境变量定义文件,因为那样可能会造成潜在的危险。
- 例:$ cd ~ #切换到用户目录
$ ls -a #查看当前目录下所有文件和子目录,包含隐藏的文件
$ vi .bash_profile # 修改环境变量定义文件
环境变量更改后,在用户下次登录时生效,如果想立刻生效,则可执行以下命令:
$ source .bash_profile
C程序开发
近年来,Linux操作系统在嵌入式系统领域的延伸可谓如日中天,许多版本的嵌入式Linux系统被开发出来。
ucLinux、RTLinux、ARM-Linux等。
基于Linux的C语言编程也成为社会所亟需的方法。
GCC
- 一个C/C++程序从开始编码到生成可执行的二进制文件至少需要经过4个步骤:
- 预处理(Preprocessing)
- 编译(Compilation)
- 汇编(Assembly)
- 连接(Linking)
- GCC是一套由GNU开发的编程语言编译器。
- GCC的基本使用格式:
$ GCC [选项] <文件名>\
C程序的编译步骤
- gcc –E hello.c –o hello.i 生成预处理后的文件
- 高级语言->汇编->机器语言(二进制文件)
gcc –S hello.i –o hello.s (生成汇编代码) - gcc –c hello.s –o hello.o (生成目标文件,二进制)
- 二进制文件与库绑定之后才真正执行
gcc hello.o –o hello (生成可执行文件)
ldd a (查看可执行程序依赖的库) a绑定了库
GCC的使用格式:
$ gcc hello.c -o hello
make工具与makefile文件
- make工具程序的主要用途是能自动地决定一个含有很多源程序文件的大型程序中哪个文件需要被重新编译。详细说明可以参考GNU make使用手册。
- makefile文件是make工具程序的配置文件,makefile文件会告诉make如何编译和连接一个文件。
- make的执行过程分为两个不同的阶段:
- 第一阶段,它读取所有的makefile文件内容,记录所有的变量及其值、隐式或显式的规则,并构造所有目标对象及其先决条件的全景图。
- 第二阶段,make使用这些内部结构来确定哪个目标对象需要被重建,并且使用相应的规则来操作。
make工具工作原理
- 当make重新编译程序时,每个修改过的c代码文件必须被重新编译。
- 如果头文件被修改,那么每一个包含该头文件的c代码程序都将被重新编译。
- 每次编译操作都产生一个与原程序对应的目标文件。
- 最后,当任何源代码文件都被编译后,所有的目标文件不管是刚编译的还是以前编译的,将连接在一起从而生成新的可执行文件。
- *内核编译时每个目录下都有一个Makefile文件,可以通过make命令对内核重新编译。
make使用方法
- make的使用方法:$ make
- 解释:它会到当前目录下寻找makefile文件,然后依照makefile中所记录的步骤一步一步地执行。
- 简单的makefile文件包含一些规则,形式为:
目标(target): 先决条件(prerequisites)
命令(command) - “目标”可以是两种情况:
- 其一,程序生成的一个文件的名称,如可执行文件或目标文件;
- 其二,所要采取的动作,如“清除”(clean)。
- 其一,程序生成的一个文件的名称,如可执行文件或目标文件;
- “先决条件”是一个或多个文件名,用作产生目标的输入条件。一个目标可能依赖多个文件。
makefile文件规则
- “命令”是make执行的具体操作。
- 一个规则可以包含多个命令,每个命令一行。注意:命令行之前需要输入一个制表符“Tab”。
- 自动变量是一种在命令行上根据具体情况能被自动替换的变量,其值基于目标对象及其先决条件。
- 如“$^”表示规则的所有先决条件,包含他们所在目录的名称;
- “$<”表示规则中的第一个先决条件;
- “$@”表示目标对象。
C 程序开发举例
- 假定/home/wxdh目录下有
- func.h
- func.c
- myapp.c
- 说明:
- func.h文件定义了函数func
- func.c文件实现了该函数
- 文件myapp.c则调用了func函数
C程序示例
目标1:产生myapp可执行文件
myapp: myapp.o func.o
gcc myapp.o func.o –o myapp
目标2:产生myapp.o
myapp.o: myapp.c func.h
gcc -Wall –g -c myapp.c
目标3:产生func.o
func.o: func.c func.h
gcc –Wall –g –c func.c
编译过程
编译过程:
- 首先切换到目录“/home/wxdh”,然后键入“make”即可编译。
$ cd /home/wxdh
$ make
产生一个myapp可执行程序。 - 运行过程:在目录“/home/wxdh”下,键入“./myapp”即可。
$ ./myapp 得到该文件执行结果