做网站报价出名的,数据库调用做wordpress,正规代做毕业设计的网站,wordpress视频下载目录
一#xff0c;stderr
2. errno全局变量
二#xff0c;文件系统
1. 软链接
2. 硬链接
三#xff0c;静态库
1. 制作静态库
2. 自动化生成静态库 自动发布库与头文件
3. 如何使用第三方库
法#xff08;一#xff09;#xff1a;修改系统文件库
…
目录
一stderr
2. errno全局变量
二文件系统
1. 软链接
2. 硬链接
三静态库
1. 制作静态库
2. 自动化生成静态库 自动发布库与头文件
3. 如何使用第三方库
法一修改系统文件库
法二指定头文件与静态库文件g为例推荐
四动态库
1. 制作动态库
2. 对动态库进行打包自动发布
法一添加库环境变量
法二动态链接库推荐
法三建立软链接推荐 前言
建议先学习【Linux】文件描述符基础知识——上篇-CSDN博客 一stderr 这里细化一下以往的理解以往我们在学习文件描述符时临时理解为有各自的文件但实际上错误表也是指向显示器文件。 这个其实也比较好理解错误信息也是需要打印到显示器上的。
简单玩玩
很轻易的发现错误信息在stderr(cerr)的缓冲区, 操作中只将fd 1重定向到 test.txt中。
等一下还有一个玩法通过1的指向,让2指向1的指向当然./Test 已经重定向test.txt了。 2. errno全局变量
我们回顾一下C语言中errno函数说白就是一个全局接收最后的错误码的变量。 头文件errno.h 那如何使用呢 平时perror()函数就会调用strerror(error)函数也可以打印相关错误信息。 二文件系统
大家可以先了解机械磁盘结构寻址方法选择。 由上图可知Inode记录Data Block中数据的各种属性同时在linux中操作系统也通过Inode进行查找文件文件名主要是方便我们辨认。
我们下命令行上尝试输入以下指令 ls -al -i 问为什么我们下载一个应用时需要很久的时间但卸载时却很快
答我们回顾一下磁盘数据的分布Inode记录文件属性Data Blocks记录文件内容。删除操作时Inode属性就修改为未被占用即可。如果我们误删了一个文件只要我们能找到文件Inode的值并且Inode和Data Block未被占用我们就可以通过一下恢复工具进行复原。所以当我们在公司误删了一个大文件时最好的办法时不要再操作电脑。 1. 软链接 语法ln -s 源文件 目标文件示例ln -s /path/to/source /path/to/link创建软链接时目标文件会指向源文件的路径。软链接可以跨文件系统也可以链接目录 2. 硬链接 语法ln 源文件 目标文件示例ln /path/to/source /path/to/link创建硬链接时目标文件会与源文件共享相同的inode和数据块。硬链接只能链接文件不能链接目录。硬链接不能跨文件系统因为Inode跟源文件相同不同系统下inode就不一定相同了 注意
软链接和硬链接的删除操作不会影响源文件只会删除链接文件。软链接的权限与源文件无关而硬链接的权限与源文件相同。软链接可以指向不存在的文件而硬链接必须指向已经存在的文件。 问我们在创建一个空目录时引用计数器为什么是 2 答在目录中会自动创建2个文件 “.” .. 其中“.” 文件就是目录文件的硬链接。 三静态库
我们先看平常的多文件编译 1. 制作静态库
但是别人想用你的源文件呢但你又不太想将源代码给他 操作将源文件编译成 .o文件给他们提供头文件及编译好的.o文件。 然后将main的.o文件同其他.o文件链接形成可执行文件即可。 但我们会注意到这样子我们得一个一个的对源文件进行编译非常得繁琐或许我们可以尝试进行打包。
这里我们得引入一个指令 ar——可以理解为archive files 归档 ar -r(更新) -c(创建) lib[自定义].a 这个lib_myfunc.a 文件就是所谓的静态库 但这并不是一键完成后面我们将通过makefile自动化生成。 2. 自动化生成静态库 自动发布库与头文件
我们修改一下makefile 1 lib_myfunc.a: my_print.o my_lib.o 2 ar -rc lib_myfunc.a my_print.o my_lib.o3 4 my_lib.o:my_lib.cc5 g -c -stdc11 -o $ $^6 my_print.o:my_print.cc 7 g -c -stdc11 -o $ $^8 9 .PHONY:publish10 publish:11 mkdir -p publish/include12 mkdir -p publish/lib 13 cp -rf *.h ./publish/include 14 cp -rf *.a ./publish/lib15 16 17 .PHONY:clean18 clean: 19 rm -rf *.o lib_myfunc.a publish 这样我们就将自动打包头文件并做到同时更新最新的静态库。 3. 如何使用第三方库
法一修改系统文件库 gcc头文件一般放置在 /usr/include 文件中 库文件一般放置在 /usr/lib 文件中 1. 首先向语言级头文件中添加我们的第三方头文件。 2. 库文件也是如此添加第三方静态库。 3. 调用第三方库(以g为例) 指令g -stdc11 源文件 -l自定义 参考ar -r(更新) -c(创建) lib[自定义].a
因为g与gcc, 在编译时默认调用操作系统中的各自的静态库当需要使用第三方库时需要手动链接第三方库。
这个操作有一些缺点就是我们自己提供的头文件静态库没有进行过安全验证可能存在漏洞因此不建议直接写在操作系统的头文件或库中。 法二指定头文件与静态库文件g为例推荐
直接用指令 -I指定头文件路径 -L指定库路径 -l: 指定库文件 四动态库 动态库和静态库是在编程中常用的两种库文件形式它们之间的主要区别在于以下几个方面 链接时机静态库在编译时被链接到可执行文件中而动态库被调用时被加载到内存中。 文件大小静态库会将所有的代码和数据都包含在库文件中因此会增加可执行文件的大小。而动态库只包含代码和数据的引用因此可执行文件的大小会更小。 内存占用静态库在可执行文件中被完全复制到内存中因此会占用更多的内存空间。而动态库在运行时被加载到内存中并且多个程序可以共享同一个动态库存在于地址空间的共享区因此可以减少内存占用。 更新和维护静态库在可执行文件中如果库文件需要更新或修复bug需要重新编译和链接整个程序。而动态库可以独立于可执行文件进行更新和维护只需要替换库文件即可。 可移植性静态库在不同的操作系统和架构上需要重新编译因为它们与可执行文件紧密绑定。而动态库可以在不同的操作系统和架构上共享使用。 总的来说静态库适用于需要独立运行的程序而动态库适用于多个程序共享使用的情况。选择使用哪种库文件形式取决于具体的需求和应用场景。来自chatgpt 1. 制作动态库 形成.o文件时只需要添加-fPIC形成一个与 位置无关的动态库。 (感兴趣可以了解一下 动态库是一种共享库可以在多个程序中共享使用。使用动态库可以减小程序的体积提高代码的复用性和维护性。 -fPIC选项告诉编译器生成位置无关的代码。生成位置无关代码的过程中编译器会使用相对寻址而不是绝对寻址以便在加载到内存时可以适应不同的内存地址。这样就可以将动态库加载到任意位置而不需要修改代码。 总结起来使用-fPIC选项编译代码可以生成位置无关的动态库使得动态库可以在不同的内存地址加载而不需要修改代码。)来自chatgpt 2. 对动态库进行打包自动发布 特殊之处-shared 指令 .so 结尾 5 lib_myfunc.so: my_print_d.o my_lib_d.o6 g -stdc11 -shared -o $ $^7 8 my_print_d.o: my_print.cc9 g -stdc11 -fPIC -c -o $ $^10 my_lib_d.o: my_lib.cc11 g -stdc11 -fPIC -c -o $ $^特点
1. 如果静态库与动态库同名则默认调用动态库。
2. 动静态库如果仅一个编译器则有啥用啥
3. 如果动静态库都存在但要求是使用静态库则添加-static选项即可 但是问题来了下面我们编译链接完成形成可执行程序a.out但由于动态链接是在运行时才被加载所以错误才显现。 找不到动态库 这要引出本次要了解的知识。 不只是运行进程需要地址但我们寻找静态库时也需要地址那么这时就需要关于库的环境变量。 输入 echo $LD_LIBRARY_PATH 查看我们的库路径。
那如何解决找不到我们动态库的问题 法一添加库环境变量
解决起来很简单添加一个库环境变量即可。 export LD_LIBRARY_PATH$LD_LIBRARY_PATH库地址 但这个环境变量只是一个临时方案。 法二动态链接库推荐
通过向 /etc/ld.so.conf.d/ 创建一个配置文件——填入库地址
如何理解目录 /etc/ld.so.conf.d/ 在Linux系统中ld.so.conf.d是一个目录用于存放动态链接器ld.so的配置文件。该目录中的每个文件都是一个独立的配置文件以.conf为后缀名。 然后通过 sudo ldconfig 指令发布
解释在安装新的动态链接库或更新已有的动态链接库时通常需要运行ldconfig命令来更新动态链接器的配置和缓存文件。 法三建立软链接推荐
这个方法法二要容易些且不像法一会被重置。
思想向lib64目录一个软链接 推荐几个好玩的库 结语 本小节就到这里了感谢小伙伴的浏览如果有什么建议欢迎在评论区评论如果给小伙伴带来一些收获请留下你的小赞你的点赞和关注将会成为博主创作的动力。