WEBSERVER01

LINUX系统编程入门

GCC

GNU开发的编程语言编译器,支持多种标准 -std-c99

sudo apt-install gcc g++

gcc/g++ -v/--version

编程语言的发展 :高级语言-汇编语言-机器语言-计算机运行

GCC工作流程

源代码-预处理器-预处理后源代码.i-编译器-汇编代码.s-汇编器-目标代码.o,启动代码,库代码,其他目标代码-链接器-可执行程序.exe .out

预处理 编译 汇编 链接

GCC常见参数

静态库的制作

静态库的在静态阶段链接到了程序中,动态库在程序运行的时候系统动态加载到内存中供程序调用

库不能单独运行

命名规则 linux  libxxx.a

gcc获得.o文件,将.o文件打包,使用ar工具

r-将文件插入备忘文件 c-建立备忘文件 s-索引

gcc -c test.c只生成test.o,不链接

ar rcs libtest.a test.o

静态库的运用

找不到文件,去指定目录下面寻找 gcc main.c -o app -I ./include/

找不到库,库的名称,以及指定库的路径 gcc main.c -0 app -l calc(库文件)-L ./lib/

动态库的运用

Linux libxxx.so

gcc得到.o文件 得到位置无关的代码 gcc -c -fpic/-FPIC(位置无关) a.c b.c

gcc得到动态库 gcc -shared a.o b.o -o libcalc.so

先生成动态库,在执行main同样的添加文件和库

ldd main 查看

需要在添加动态库的绝对路径 

1.通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:绝对路径(删除之后就没有了

永久配置

2.用户级别的配置 vim .bashsrc

在文件里加入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:绝对路径

执行. .bashsrc

3.系统级别的配置

sudo vim /etc/profile 

在文件里加入export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:绝对路径

. /etc/profile

2024.7.17 5.30

静态库优点 加载速度快,发布程序无需提供静态库,移植方便

缺点 消耗系统内存,部署麻烦

动态库优点 可以实现进程内资源共享,更新部署发布简单,可以控制何时加载动态库

缺点 加载速度比静态库慢,发布程序时候需要提供依赖的动态库

makefile

Makefile定义

那些文件先编译,那些文件需要重新编译,带来自动化编译的好处

make是一个命令工具,Linux下Gnu的make

命名

makefile或者Makefile

makefile规则目标  ... :依赖 ...

                        命令

                         ....

vim Makefile 
make 
./make
工作原理 

Makefile其他规则是为第一条规则服务的

命令在执行之前,需要先检查规则中的依赖是否存在,不存在的话向下查找其他规则

检查更新,在执行规则的命令中,会比较目标和依赖文件的时间;如果依赖的时间比目标晚,会重新,会重新生成目标

变量

模式匹配

函数

GDB

GDB是调试工具,启动程序;在断点处停住;当程序被停下,检查发生的事情;可以改变程序

关掉优化选项-o  打开调试选项-g(一定),在可执行文件中加入源代码的信息

gcc -g  -Wall program.c -o program 

gcc test.c -o test -g
gdb test
set args 10 20 
show args

until 跳出当前循环 在执行完循环体内的最后一条语句之后执行 until,才可以跳出循环

文件IO

文件指针:文件描述符int _fileno,读写指针位置,I/O缓冲区

标准c库被调用的时候会系统调用得到文件描述符fd,再给int -fileno

虚拟地址空间不存在

程序是文件,保存在磁盘中

进程正在运行的程序,占用内存,虚拟地址空间映射到物理空间

文件描述符表前三个默认被占用,标准输入、输出、错误,每个表项都指向一个打开的文件

一个文件可以多次被打开,但是对应的文件描述符表不一样

open / close

man 2 Linux系统调用 man 3 c库,标准库

read/write

lseek

stat

文件属性chmod access chown truncate
目录操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值