linux文档库,LINUX中的库文档总结

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

gcc编译过程

我这里就不用什么流程图语法了,发现markdown语法编辑器似乎不支持

hello.c–预处理器(cpp)[gcc -E]–>hello.i(c文档)–编译器(gcc)[gcc -S]–>hello.s(汇编文档)–汇编器(as)[gcc -C]–>hello.o(二进制文档)–连接器(ld)[gcc]–>a.out(可执行文档)

预处理器:cpp ===>头文档展开,宏替换,注释去掉 gcc -E hello.c -o hello.i编译器:gcc ===>C文档变成汇编文档 gcc -S hello.i -o hello.s

汇编器:as ===>汇编文档变成二进制文档 gcc -c hello.s -o hello.o链接器:ld ===>将函数库中相应的代码组合到目标文档中 gcc hello.o -o hello

例:gcc example.c -I ./include -o app -D DEBUG -O3 -Wall -g

-I 指定头文档路劲

-o 指定生成文档名字

-D 编译时指定宏

-O 是否优化(冗余)进程(最高3,0不优化)

-Wall 在进程编译的时候输出警告信息

-g 进程中生成gdb调试信息(gdb调试时必须添加此)

静态库的制作和使用

1、命名规则lib + 库名字 + .a

2、制作步骤

step1:生成对应的.o文档 –.c—->.o 参数-c

step2: 将生成的静态.o文档打包(ar rcs + 静态库的名字(libMytest.a) + 生成的所有.o)

例:gcc.c -c -I../include

ar rcs libMyCalc.a.o

mv ../lib

step3: 发布和使用静态库发布静态库 /lib

头文档 /include

step4: 使用方法一:gcc maintest.c lib/libMyCalc.a -o sum -I include

方法二:gcc maintest.c -I include -L lib -l MyCalc -o myapp

-L 指定库的路劲

-l 指定库的名字

静态库的优缺点

1、发布进程时,不需提供对应的库,因为已经将对应的库二进制打包到进程中

2、加载库速度快

3、库打包到进程中去,导致进程很大

4、库发生了改变,需要重新编译进程

查看库里面的东西:nm libMyCalc.a

add.o:

0000000000 T add

div.o:

0000000000 T div

例:>nm myapp //也可以查看可执行文档

T表示add 代码存放在代码区

共享库(动态库)

1、命名规则lib + 名字 + .so

2、制作步骤

step1:生成与位置无关的.ogcc -fPIC -c *.c -I ../include

step2:将.o打包成共享库(动态库)gcc -shared libMyCalc.so *.o -I include

step3:发布.so和.include文档

step4:使用gcc maintest.c lib/libMyCalc.so -o app -I include

gcc maintest.c -I include -L ./lib -l MyCalc -o myapp

//-L 指定库路劲

//-l 指定库名字

ldd查看可执行文档执行时所依赖的所有动态库ldd myapp

可执行进程(./a.out)

动态连接器是按照环境变量去找动态连接库echo $PATH //打印环境变量

系统加载的时候从系统库(/lib)中加载

LINUX中动态库的位置:

1、/lib(更目录下lib目录)

所以,可以将用户库.so放到系统库目录下 (ldd myapp 可查看)

2、除系统库外提供了一个环境变量让用户配置LD_LIBRARY_PATH,系统会先搜索这个环境变量里的库,再去搜索系统默认库echo $LD_LIBRARY_PATHexport(导入) LD_LIBRARY_PATH=./lib(将自己库路劲赋给环境变量)

注:这是临时设置,终端关闭重启就没了,主要用于开发过程中临时测试

3、当前用户的.bashrc文档,相对上面是长久生效方法

将下面添加在.brashrc文档最后,重启终端生效export(导入) LD_LIBRARY_PATH=./lib(将自己库路劲赋给环境变量)

4、重要方法

step1:需要找到动态库连接器的配置文档(/etc下的ld.so.conf文档)/etc/ld.so.conf

step2:将自己的动态库的路径写道配置文档中/home/…/lib //注意要写绝对路径

step3:更新动态连接器配置文档使其生效sudo ldconfig -v(输出信息)

动态库优缺点

1、执行进程体积小

2、动态库更新了,不需要重新编译进程,函数接口不变

3、发布时需将动态库提供给用户

4、动态库没有加载到应用进程中,加载速度较慢

写得好的博文

PATH和LD_LIBRARY_PATH本质都是变量,所谓变量的意思就是由别人赋值产生的,直觉往往会让我们添加和减少这个变量本身的某些路径,实际上这是不正确的。正确的做法是我们要去修改赋予这个变量数值的那些配置文档,加一条路径或者减一条。说到底变量只关乎显示,不关乎其用于显示的内容。

PATH:可执行进程的查找路径

查看当前环境变量:

设置方法:

方法一: export PATH=PATH:/XXX 但是登出后就失效

方法二:修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile

①在其中添加例如export PATH=/opt/ActivePython-2.7/bin:$PATH

②source .bashrc (Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文档,使之立即生效,而不必注销并重新登录)

LD_LIBRARY_PATH: 动态库的查找路径

设置:

方法一:export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 但是登出后就失效

方法二:修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile

①在其中添加例如export PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH

②source .bashrc(Source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文档,使之立即生效,而不必注销并重新登录)

方法三:这个没有修改LD_LIBRARY_PATH但是效果是一样的实现动态库的查找,

①/etc/ld.so.conf下面加一行/usr/local/mysql/lib

②保存过后ldconfig一下(ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文档/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib.so),进而创建出动态装入进程(ld.so)所需的连接和缓存文档.缓存文档默认为/etc/ld.so.cache,此文档保存已排好序的动态链接库名字列表.)

方法三设置稍微麻烦,好处是比较不受用户的限制。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值