我眼中的linux共享库

共享库数量庞大,所以操作系统需要对共享对象的目录组织和使用方法有一定的规则。

1.1共享库兼容性

共享库更新分为兼容性更新和不兼容性更新。共享库中的接口,被称作二进制接口,即ABI(application binary interface);
防止共享库不兼容的重要因素:不要改变接口的任何部分或者干脆不要使用C++作为共享库接口。
拓展:C++类模板和模板类
模板类是类模板实例化后的一个产物,说个具体点的例子吧,我们把类模板比作是一个做饼干的模子,而模板类就是用这个模子做出来的饼干,至于这个饼干是什么味道的就要看你自己在实例化时用的是什么材料了,你可以做巧克力饼干,也可以做牛奶饼干,这些饼干出了材料不一样外,其它的东西都是一样的了。

1.2共享库版本命名规则

Libname.so.x.y.z,x主版本号,y次版本号,z发布版本号。
可执行文件中,保存了需要共享库的主版本号。Solaris和linux中的SO-NAME机制记录了共享库之间的依赖关系。在linux中,对于共享库,会存在同目录下,创建一个指向此共享库的软链接。

软链接的作用是软链接指向的是最新版本的共享库(同一主版本下的最新版本),有一个好处就是使得依赖于某个共享库的模块,不依赖于详细的版本号。
SO-NAME表示一个库的接口。
链接器参数设为 -lc表示按需选择动态/静态库,-static表示静态,-Bdynamic表示动态库(默认情况)。
SO-NAME机制加上共享库的符号版本信息,保证了主版本号一致下的程序正常运行。(lunux中并未广泛运用,Glibc则是)
Linux支持同一函数的多个版本的存在,以便于链接器挑选合适版本的符号进行链接(函数以符号保存,通过符号定位函数)。

1.3 共享库查找过程

动态链接的ELF可执行文件在启动时会自动启动动态链接器,程序运行所以来的共享对象全部是由动态链接器负责装载和初始化。

Linux系统中包含一个ldconfig程序,作用是为共享库目录下的各个共享库创建、删除、更新相应的SO-NAME(符号链接),并会收集起来,集中存放到/etc/ld.so.cache文件里边,并创建一个SO-NAME的缓存,/etc/ld.so.cache的结构被特殊设计,以便于快速查找。

理论上,程序安装在安装过程中,都会调用ldconfig程序。不同系统下,上述的两个文件名称或者路径会不一样。

1.4环境变量

Linux提供一种方法,即提供环境变量LD_LIBARARY_PATH,改变某个应用程序共享库的查找路径,而不影响系统中的其他程序。LD_PRELOAD环境变量里路径边的共享库和目标文件都会被优先提前加载。发布一个版本的程序不应该依赖于LD_PRELOAD。LD_DEBUG环境变量可以打开动态链接器的调试功能,显示链接中的有用信息等。

1.5共享库的创建与安装

创建共享库或共享对象,gcc、-shared、-fPIC(position independent code)。
Strip工具可以清除共享库或者可执行文件中所有的符号和调试信息。
或者在gcc时,指定-s(清除所有调试信息)和-S(清除符号调试信息)。
共享库的安装,**方法一为:将共享库拷贝到对于目录下(需要root权限),然后运行ldconfig。方法二,无非也是为了建立相应的SO-NAME软链接,并告诉编译器和程序如何查找到该共享库并正确运行,**此时也需要用到ldconfig,需要制定共享库所在目录,即执行如下命令:

1.6共享库构造函数与析构函数

构造函数即可以帮助共享库在被装载时,能够进行一些初始化工作,如打开文件、网络连接等。在函数声明时加上“attribute((constructor))”的属性,即指定该函数为构造函数,使用“attribute((destructor))”为析构函数用。当用dlopen()打开一个共享库时,构造函数会在dlopen函数返回前执行,而析构函数则会在main函数退出,或者程序调用exit函数时执行。如果共享库时运行时加载的,则会在调用dlclose函数返回前执行。__attribute__语法是gcc对C、C++的拓展,对其他编译器语法不通用。多个共享库的构造函数可以选择指定优先级按顺序执行,或者无顺序。

1.7共享库脚本

上述提到的共享库都是动态链接的ELF共享对象文件(.so),事实上共享库还可以是符合一定格式的链接脚本文件,即讲一个或者多个共享库按照一个方式组合起来即可,这种脚本文件的链接过程是动态完成的,也就是运行时完成。LD是一个共享库,也是一个动态链接脚本

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值