编译命令gcc

源代码要想能够在机器上执行,需要进行编译,编译的过程如下示例:

c语言源代码-预处理器(cpp)-编译器(ccl)-汇编器(as)-链接器-输出可执行二进制文件

预处理:删除注释、定义;添加行号和标识。保理编译器直连等

编译(compiling):分析语法并优化,生成汇编代码

汇编(assembling):将代码转为可执行的命令

链接(linking):通过调用ld来链接程序需要的一大堆目标文件及所依赖的库文件,最后输出可执行文件

gcc命令执行编译:

预处理,生成.i文件  gcc -E hello.c -o hello.i

编译,生成.s文件  gcc -S hello.i -o hello.s

汇编,生成.o文件  gcc -C hello.s -o hello.o

链接,生成可执行文件 gcc hello.o -o hello

可以直接一步编译:gcc hello.c -o hello

27、软件包管理_配置文件

链接命令ldd

链接主要作用是将各个模块之间相互引用,可分为静态链接和动态链接,静态链接是将所有包打包到一起,这种编译出来的文件很大,动态链接是使用链接指向,编译出文件占用相对少,目前用的较多是动态链接

可以使用ldd命令查看二级制文件所依赖的库文件

格式:ldd /pathto/binary_file

27、软件包管理_包管理器_02

管理查看本机装载的库文件

加载配置文件中指定库文件 ldconfig

显示本机已缓存所有可用库文件及映射关系 /sbin/ldconfig -p

27、软件包管理_包管理器_03

配置文件 :/etc/ld.so.conf    /etc/ld.so.conf/*.conf

缓存文件:/etc/ld.so.cache

库文件丢失了导致命令无法使用?

27、软件包管理_包管理器_04

修复步骤

挂载镜像-开机以cd/DVD Iso进行启动-选择Rescue  a  CentOS Linux  system-选择continue-将光盘下的libc.so.6文件复制到虚拟机对应文件里(光盘下的文件默认被挂载在/mnt/sysimage下,相当于根目录)然后输入exit退出,等待。

27、软件包管理_库文件_05

27、软件包管理_库文件_06


软件包

软件包中主要有以下几种文件

二进制文件  库文件   配置文件  帮助文件

可以利用cpio查看包文件列表

rpm2cpio 包文件 | cpio -itv 预览包内文件

rpm2cpio 包文件 | cpio -id "*.conf"释放包内文件

程序包管理器

主流程序包管理器  redhat:rpm文件、rpm包管理器        debian:deb文件、dpkg包管理器

rpm包文件命名:

27、软件包管理_包管理器_07

包的分类:

 applicataion-version-arch.rpm 主包

 applicataion-devel-version-arch.rpm 子包

applicataion-utils-version-arch.rpm 其他包

applicataion-libs-version-arch.rpm 其他包

包的依赖:

 包之间可能存在依赖关系,比如安装A包时需要提前安装B包等

程序包管理器相关文件:

1、包文件组成:元数据、脚本、包内文件等

2、数据库(公共):/var/lib/rpm  等同于windows的控制面板

  程序包名称和版本、依赖关系、功能说明、安装路径等信息

注:如果该数据库删除后,则无法安装卸载程序

27、软件包管理_配置文件_08