Linux操作系统-----应用开发概述
应用开发
- 前言
- 一、程序的安装与配置
- 安装程序与更新软件
- RPM和DPKG两大阵营
- RPM包管理
- RPM的缺点
- YUM包管理
- 管理
- APT包管理
- ALIEN工具
- 二、环境变量
- 设置环境变量
- 与环境变量相关的文件
- 环境变量设置方法
- C程序开发
- GCC
- C程序的编译步骤
- GCC的使用格式:
- make工具与makefile文件
- make工具工作原理
- make使用方法
- makefile文件规则
- C 程序开发举例
- C程序示例
- 目标1:产生myapp可执行文件
- 目标2:产生myapp.o
- 目标3:产生func.o
- 编译过程
前言
程序安装与配置
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 得到该文件执行结果
Linux操作系统-----应用开发概述相关推荐
- Linux设备驱动开发概述
作者:宋宝华 email:author@linuxdriver.cn 在过去这些年,Linux已经成功应用于服务器和桌面系统,而近年来,随着嵌入式系统应用的持续升温,Linux也开始广泛应用于嵌入式领 ...
- 趣谈Linux操作系统01:概述
目录 1. Linux学习路径 2. Linux内核体系结构 3. 系统调用简介 3.1 系统调用分类简介 3.1.1 进程管理 3.1.2 内存管理 3.1.3 文件管理 3.1.4 信号处理 3. ...
- 《Linux操作系统 - RK3288开发笔记》第2章 G-3288-02开发环境搭建
2.1开发环境 Windows 下有很多虚拟机软件,目前市面上流行的有 VMware 和 VirtualBox. VMware 分为收费专业版 Workstation Pro 和非商用免费版 Work ...
- 《Linux操作系统 - RK3288开发笔记》第1章 吉方工控G-3288-02固件更新
最近在研究吉方工控推出的G-3288-02开发板,该开发板使用的处理器是RK3288,和大家熟知的Firefly-RK3288是一样的处理器,只是板子的外设些许不同,今天我就带着大家一起来探索这块优秀 ...
- Linux操作系统 §1:概述
本篇你将掌握的内容: 文章目录 1.1 Linux 1.1.1 定义 1.1.2 优点 1.1.3 发行版 1.2 Shell的定义 1.3 Linux的框架 1.4 学习方法 1.1 Linux 1 ...
- go系列-linux操作系统go开发环境部署
资源网址:Downloads - The Go Programming Language go环境部署 一.下载安装包 wget https://golang.google.cn/dl/go1.11. ...
- 《Linux操作系统 - RK3288开发笔记》第3章 G-3288-02 SD卡启动及变砖恢复
G-3288-02出厂默认已经烧写了Android系统,但Android系统不一定满足需求,因此会进行系统移植,当移植的系统在升级过程中出现意外,无法启动,直接变砖了,导致无法重新升级,这个不要慌,可 ...
- 《Linux操作系统 - 驱动开发》第9章 进程上下文、中断上下文及原子上下文
谈论进程上下文 .中断上下文.原子上下文之前,有必要讨论下两个概念: a – 上下文 上下文是从英文context翻译过来,指的是一种环境.相对于进程而言,就是进程执行时的环境: 具体来说就是各个变量 ...
- Linux设备驱动开发详解【三】_Linux 内核及内核编程
本文简介 由于 Linux 驱动编程本质属于 Linux 内核编程,因此有必要掌握 Linux 内核及内核编程的基础知识. 3.1-3.2 节讲解 Linux 内核的演变及 Linux ...
- Linux操作系统下的TCP/IP网络通信
基于Linux操作系统下的TCP/IP网络通信研究与应用 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA-C)连续时间型滤波器的结构.设计和具体实现,使用外部可编 ...
最新文章
- 踏向星辰的少年|敢与自己开“杠”,才能和一群人开挂
- pmp知识点详解-项目大牛整理_PMP核心知识点—第五章:项目范围管理(1)
- assign,copy,strong,weak,nonatomic的具体理解
- 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料???
- unity调用python脚本_Unity3d中C#脚本调用另一个C#脚本的方法
- spark之5:配置文件
- 注册确认邮件中图片不显示的问题
- [蓝桥杯][算法提高VIP]最小乘积(提高型)-排序
- 计算机用户账户无法打开浏览器,请问怎么样禁止一个电脑用户使用IE浏览器
- oracle定时向mysql取数据_Oracle中通过Job实现定时同步两个数据表之间的数据
- Golang错误和异常处理的正确姿势
- 拦截器和过滤器的区别 -- 简单分析篇
- java 对excel指定单元格的数据修改后并输出到指定文件夹
- 金融壹账通加马美国研究院“壹账通记忆增强网络”获对话系统学术竞赛佳绩...
- php 解析p2p节目源,P2P加速解析与伪一次解析源码教程
- matlab中的多行注释
- QQ小游戏 微信小游戏 即时通信 IM 登录login sdk
- Ceph新建monitor或者osd报错:use --overwrite-conf to overwrite
- python单词表首字母排序_python3 列表排序(字母顺序排序、字母相反顺序排序和倒序)...
- 入门OJ:郭嘉的消息传递
热门文章
- office下载哪个版本比较好
- python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...
- qqkey获取原理_【逆向】QQkey盗号木马原理分析
- (休息几天)读曼昆之微观经济学——公共物品和资源
- gedit c语言,让gedit 成为强大的C语言IDE
- CenterOs操作
- cad迷你画图 mac
- 企业微信如何借助企客加运营私域流量的策略
- mysql主从 备份数据库脱敏_数据库脱敏有用吗?会不会损坏重要数据?
- 数字电路基础知识—— IO外设之GPIO介绍