linux 系统编程基础部分 day1

常用指令

创建修改用户组

查看当前用户组:whoami

创建用户 sudo adduser 用户    sudo addgroup 组名

添加权限:chmod [u,g,o,a]+[x,w,r]   数字表示法r4 w2 x1   chmod 471    每个权限种类想加

给文件换所属用户 chown 新用户名 文件名    chgrp

递归查找:find 路径 -type/name ' '   无递归: find 路径  -maxdepth 1  -type/name '文件名';

type按照文件类型   name按照文件名 maxdepth搜索深度 size按文件大小

ps aux | grep ' '        grep -r 'copy' ./ -n   find 之后不能交给 管道 | 运行   可以加xargs

gcc编译可执行程序4步骤

 编译阶段消耗时间、系统资源最多。

gcc -I 地址  指定头文件目录       -g gdb调试   -Wall 显示所有警告信息  -D 像程序中”动态“注册宏定义。

静态库和动态库

静态库:对空间要求较低,而对时间要求较高的核心程序中

动态库:对空间要求较高,而对时间要求较低的核心程序中

头文件守卫:防止头文件被重复包含
#ifndef _HEAD_
#define _HEAD


#endif

 动态库制作及引用

1、将.c生成.o文件(生成与位置无关的代码 -fPIC) 

gcc -c add.c -o add.o -fPIC

2、使用gcc -shared 制作动态库

gcc -shared lib库名.so add.o sub.o div1.o

3、编译可执行程序时,指定所使用的动态库  -l:库名  -L:库路径

gcc test.c -o a.out -lmymath -L.lib

4、运行可执行文件 ./  但是会出错

原因:链接器:工作于链接阶段  工作时需要 -l -L
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在的位置

通过环境遍历:export LD_LIBRARY_PATH = 动态库路径     ./成功

如果要长期有效,需要写入终端配置文件 .bashrc

gdb调试工具

gcc -g 使用该参数编译可执行文件,得到调试表

gdb a.out

list   1:从第一行开始列出源码

b: b 20 在20行设置断点

run : r  执行程序,到断点     n 下一条指令   s 步入

p : 查看变量的值     

  continue 继续执行之后指令

quit 退出gdb

使用run查找出段错误

Makefile项目管理

makefile实际上是脚本文件  命名 makefile Makefile

1个规则:

目标:依赖条件

        (一个tab缩进)命令

eg. 
hello:hello.c
    gcc hello.c -o hello

第一组目标看成终极目标 

2个函数:

wildcard:找到当前目录下所有后缀为.c的文件,赋值给src

src = $(wildcard *.c)

patsubst:把src变量里所有后缀为.c的替换成.o

将参数3中包含参数1的部分替换成参数2

obj = $(patsubst %.c, %.o, $(src));

clean 无依赖 

clean:
    -rm -rf $(obj) a.out

3个自动变量:

$@:在规则的命令中表示规则中的目标,只能出现在命令中

$^:在规则的命令中表示所有依赖条件

$<:在规则的命令中表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列别中的依赖依次取出,套用模式规则。

模式规则:

%.o:%.c
    gcc $< -o $@;

静态模式规则:

$(obj):%.o:%.c
    gcc $< -o $@;

伪目标: .PHONY:clean ALL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值