当前位置: 首页 > news >正文

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

相关文章:

  • Innovus常见 ERROR: (IMPOPT-628)全自动解决方案(ecoChangeCell报错问题)
  • 智算网络新标杆:全栈AI方案如何实现无损带宽与多租户隔离?
  • 【学习】Codeforces Round 861 (Div. 2) C. Unlucky Numbers
  • leecode Hot100之回溯算法【C++速查】
  • 【Linux】进程的详讲(下)--进程的环境变量
  • 高边MOSFET(High-Side MOSFET)
  • Python Path对象symlink_to方法介绍
  • 文本纠错WPS插件:提升文档质量的利器
  • 关于 CSDN的C知道功能模块 的详细解析,包括 新增的AI搜索(可选深度思考) 和 智能体功能 的具体说明及对比分析
  • 实验三 多表查询和子查询
  • js的es6模块中 暴露的使用方法简介
  • 鸿蒙开发01
  • 三周年创作纪念日
  • WinForm真入门(15)——NumericUpDown控件详解
  • 《灵活的接口设计:如何支持多种后端数据存取实现》
  • Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新
  • 软考高级系统架构设计师-第11章 系统架构设计
  • c# AI编程助手 — Fitten Code
  • 分布式微服务系统架构第106集:jt808,补充类加载器
  • 车载软件架构 ---单个ECU的AUTOSAR开发流程
  • 外贸50城,谁在“扛大旗”?
  • 31年前失踪的男孩与家人在重庆一派出所团聚:人像比对后DNA鉴定成功
  • 2025年度沪惠保参保今开启:保费不变,国内特药种类扩增
  • 中国旅游日主题月期间,东航将准备超51.9万套特惠机票
  • 徐之凯评《突如其来的勇气》|早熟的抵抗
  • 内部敏感文件遭万人共享,特朗普政府又曝安全漏洞