Linux基础——gcc和make

gcc和make

  • gcc和make是什么?
  • gcc
    • 编译单个程序
    • 编译链接多个程序
  • make
    • 编译
    • 清除
    • 安装与卸载
  • 函数库
    • 静态函数库
    • 动态函数库
    • 函数库载入
      • ldconfig
      • ldd
  • 程序验证

gcc和make是什么?

gcc是linux标准的编译器

make则是对一堆程序集成编译

gcc

命令 gcc 可用于编译程序,-c 将.c文件编译为.o文件,-o链接.o生成可执行文件,-l 加入lib,-L指定lib路径,-I指定include路径,-Wall 输出提示

编译单个程序

Linux基础——gcc和make_第1张图片

编译链接多个程序

如下有test1.c和test2.c,在test1.c中调用了test2.c的函数

Linux基础——gcc和make_第2张图片

需先编译出各自的.o文件

Linux基础——gcc和make_第3张图片

然后再链接.o编译可执行文件

在这里插入图片描述

make

命令 make 可简化多个程序的编写,使用时会自动加上 CFLAGS=“-Wall” 输出提示

编译

同样对于上面的test1.c和test2.c,编写makefile(红框为tab)

在这里插入图片描述

执行make或make test即可自动编译链接生成可执行文件

Linux基础——gcc和make_第4张图片

make会判断源码是否更新过,只编译需要更新的源码及自动进行相关性检查,这样可大大缩短时间

在这里插入图片描述

清除

在makefile中定义清除操作,用命令make clean执行

Linux基础——gcc和make_第5张图片

若要清除并重新编译则使用 make clean test

安装与卸载

只要将可执行程序放到 /usr/local/bin 下,即可通过文件名执行,卸载同理

Linux基础——gcc和make_第6张图片

函数库

函数库大多放在/lib64、/lib,而kernel的函数库放在/lib/modules

静态函数库

  • 通常文件名为 libxxx.a
  • 在编译的时候整合到执行程序中
  • 编译成功的可执行文件可独立运行,而不需要额外的函数库
  • 库升级后,程序要重新编译

动态函数库

  • 通常文件名为 libxxx.so
  • 在编译时不整合在执行程序中,程序需要时才读取
  • 编译出来的程序不能独立运行,必须带上库
  • 可单独升级库,而不用重新编译程序

函数库载入

为了避免每次都从硬盘中读取动态函数库的时间开销,可将函数库载入cache

  • 在/etc/ld.so.conf中写入函数库所在目录
  • 利用 ldconfig将/etc/ld.so.conf的资料读入cache
  • 同时资料会记录在/etc/ld.so.cache

ldconfig

命令 ldconfig 将资料载入cache,-f 指定资料配置文件(默认为/etc/ld.so.conf),-C 指定cache,-p列出目前函数库内容(/etc/ld.so.cache)

在这里插入图片描述

如上,在/etc/ld.so.conf.d创建配置文件将/usr/lib/python*的函数库导入cache

在这里插入图片描述

如上列出cache中的函数库,格式为名称 => 绝对路径

ldd

命令 ldd 可列出程序含有的动态函数库,-v列出所有信息,-d 列出资料有遗失的link,-r列出ELF有关的错误

Linux基础——gcc和make_第7张图片

如上列出/usr/bin/passwd的函数库

程序验证

命令 md5sum / sha1sum / sha256sum 都可打印出当前文件的MD5码,-b 使用二进制方式读取(默认为Windows/DOS方式),-c验证指纹,-t以文件形式读取

在这里插入图片描述

如上列出/etc/passwd的MD5码,当有黑客入侵修改该文件,下次打印的MD5码将会不一样

你可能感兴趣的:(#,Linux基础,linux,服务器,运维)