gcc和make是什么?
gcc是linux标准的编译器
make则是对一堆程序集成编译
gcc
命令 gcc 可用于编译程序,-c 将.c文件编译为.o文件,-o链接.o生成可执行文件,-l 加入lib,-L指定lib路径,-I指定include路径,-Wall 输出提示
编译单个程序
编译链接多个程序
如下有test1.c和test2.c,在test1.c中调用了test2.c的函数
需先编译出各自的.o文件
然后再链接.o编译可执行文件
make
命令 make 可简化多个程序的编写,使用时会自动加上 CFLAGS=“-Wall” 输出提示
编译
同样对于上面的test1.c和test2.c,编写makefile(红框为tab)
执行make或make test即可自动编译链接生成可执行文件
make会判断源码是否更新过,只编译需要更新的源码及自动进行相关性检查,这样可大大缩短时间
清除
在makefile中定义清除操作,用命令make clean执行
若要清除并重新编译则使用 make clean test
安装与卸载
只要将可执行程序放到 /usr/local/bin 下,即可通过文件名执行,卸载同理
函数库
函数库大多放在/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有关的错误
如上列出/usr/bin/passwd的函数库
程序验证
命令 md5sum / sha1sum / sha256sum 都可打印出当前文件的MD5码,-b 使用二进制方式读取(默认为Windows/DOS方式),-c验证指纹,-t以文件形式读取
如上列出/etc/passwd的MD5码,当有黑客入侵修改该文件,下次打印的MD5码将会不一样