linux第一周

本文介绍了Linux环境下的编程实践,包括编写乘法函数并生成动态库、静态库,使用gdb调试程序,处理段错误,编写Makefile以实现高效编译,以及理解动态链接和静态链接的区别。同时,文章还涵盖了核心转储分析和Makefile中的高级技巧。
摘要由CSDN通过智能技术生成

1、编写一个做两个数乘法功能的函数multi,返回值为输入的两个数的乘积,然后将其编译为动态库,静态库,并使用静态库和动态库,编写main.c,调用函数multi,得到可执行的二进制,将屏幕内容复制到文件提交
2、编写一个程序,通过gdb调试,使用到gdb的b,n,s,info,bt,p等命令,将屏幕内容复制到文件提交
3、编写一个程序,执行会产生段错误,然后产生core,定位段错误在哪一行,将屏幕内容复制到文件提交
4、编写两个.c文件,其中一个文件调用的函数在另外一个.c文件,编写Makefile,能够编译得到二进制并执行,Makefile内需使用到变量,自动变量,隐含规则,伪目标,从而使Makefile具有最佳的通用性,提交makefile文件


-D 后面跟宏命令
-Wall 在编译的时候加进去
ldd 可以分析出来命令 依赖于哪个动态库

创建动态库 gcc -fpic -Wall -c add.c 生成与地址无关的.o文件
生成动态库 尽可能地连接动态库 gcc -shared add.o -o libadd.so
将 sudo cp libadd.so /usr/lib放入库中
动态链接库函数 gcc mian.c -ladd 显示连接 查找的是libadd.so
头文件里面只是动态声明,函数实现在库里面,在函数里必须要有函数声明

创建静态库
1)gcc -Wall -c add.c
2)ar crsv libadd.a add.o
3)删除动态库libadd.so,添加sudo cp libmulti.a /usr/lib/
4)gcc main.c -ladd

看依赖的是哪个库 ldd a.out

软链接 ln -s 被连接文件(已存在) 链接文件
升级动态库: 删除原有链接 重新进行链接

gdb 调试
1)gcc -g main.c
2) gdb a.out
3) l 显示代码 / b 打断点 / r 运行/n 往下走,不进入函数/s 往下走,进入函数/p 相当于监视 /bt 调用堆栈/c 运行到最后
x /40xb &arr看内存 // info b 查看断点 //tb 临时断点,用过以后就消失了 //disable 让断点暂时消失 //delete 删除断点
b 23 if i2 || confident 断点号 i4 修改原有断点条件//finish 完成当前函数//set args 设置参数

程序挂掉时,生成core文件,查看挂掉的原因
ulimit -c unlimited 将core文件设为不限制
gcc -g crash.c
gdb a.out core 查看哪里有错误
bt 查看哪个.c里面的错误

Makefile 工程管理器
增量编译 修改过的.c编译成.o,再链接
1)伪目标 没有依赖项的目标 一般用于清理操作
在结尾加上 .PHONY:clean
clean:
rm -rf main.o func.c main
2)变量 .o文件 OBJS 执行文件ELF
3)自动变量 $@ 当前规则的目标文件
$^ 当前规则的所有依赖文件,以空格分隔
4)预定义变量 服务于隐式规则 自动寻找文件下同名.c文件变为.o文件
CC:=gcc
CFLAGS:=-g

  1 OBJS:=main.o func.o
  2 ELF:=main
  3 $(ELF):$(OBJS)
  4     gcc $^ -o $@
  5 mian.o:main.c                        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值