百科狗-知识改变命运!
--

libnsl的全面解析

梵高1年前 (2023-11-21)阅读数 45#技术干货
文章标签文件

一、libnsl是什么

libnsl是Unix/Linux系统下的一个开源C语言库,全称为“network services library”,提供了对许多网络服务程序的网络接口调用。其主要功能包括获取主机名、网络名称解析、套接字操作、RPC服务等。

相比于其它库,libnsl提供的是一套相对简单的接口,适用于在不需要高级多线程支持的情况下编写简单的、小规模的网络应用程序。

二、libnsl.so.1和2区别

libnsl.so.1和libnsl.so.2实质上是libnsl库的两个版本,它们的最大区别在于对于“yp_match”函数的实现方式不同。yp_match函数为network yellow pages(NIS)提供了查询服务器信息的支持。

在libnsl.so.2中,yp_match函数调用的是新的、“线程安全”的库函数,而libnsl.so.1则调用了比较老的不安全函数。此外,libnsl.so.2还增加了一些新的函数,如“getrpcbynumber”。

三、libnsl离线安装包

以下为libnsl库的离线安装包编译及安装代码:

wget https://download.oracle.com/otn_software/linux/instantclient/199000/oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
rpm -ivh oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
yum install gcc-c++ -y
yum install readline -y
yum install readline-devel -y
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/nss-softokn-devel-3.53.1-9.el7_9.x86_64.rpm
rpm -ivh nss-softokn-devel-3.53.1-9.el7_9.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/nss-softokn-freebl-devel-3.53.1-9.el7_9.x86_64.rpm
rpm -ivh nss-softokn-freebl-devel-3.53.1-9.el7_9.x86_64.rpm
cd /opt/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install mlocate
updatedb
yum install -y libnsl libnsl-dev

四、libnsl.so.1 银河麒麟

银河麒麟操作系统是由中国空间技术研究院研制的国产化的操作系统,为眼下具有潜力的国产科技企业及其自主研发的软件提供系统级的支持与技术服务。在银河麒麟操作系统中可以找到libnsl.so.1库。

银河麒麟中libnsl.so.1库与其他Linux系统中一致,主要提供易于调用的网络接口,方便用户使用。

五、libnsl.so属于哪个包

在使用Linux系统中的命令“ldd [filename]”可查看一个文件所依赖的链接库文件,其中也包括了libnsl.so文件所属的包。

以下是查询libnsl.so文件所属的包代码样例:

$ ldd xxx | grep -w "libnsl"
libnsl.so.1 => /usr/lib64/libnsl.so.1 (0x00007fadf47a0000)

从代码结果可以看出,libnsl.so文件所在的包是/usr/lib64/libnsl.so.1。

六、libnsl.so.1丢失怎么处理

如果在Linux系统中出现了libnsl.so.1丢失的情况,有一些比较常见的处理方法:

方法一:在终端中执行以下代码进行安装:

yum install -y libnsl

方法二:若上述方法不行,可以直接在/usr/lib64/路径下手动下载libnsl.so.1库文件。首先使用以下代码备份已有的libnsl.so.1:

libnsl的全面解析

mv /usr/lib64/libnsl.so.1 /usr/lib64/libnsl.so.1.bak

接着,从CentOS7官网上下载对应版本的libnsl.so.1库文件并将Downloads路径下的文件移动到/usr/lib64/路径下:

cd Downloads/
mv libnsl.so.1 /usr/lib64/

完成以上步骤后,执行以下命令重新查看链接库即可:

ldconfig -v |grep libnsl

七、libnsl2

libnsl2是libnsl库的新版本。这个库的主要改进是加入了多线程支持,其中“_thread safe”函数对于只是线程的应用更具有意义。

当程序需要处理大规模的线程请求时,libnsl2性能较好,且使用方便,可以方便地完成不同线程之间的数据共享。但是,在没有多线程的情况下,使用libnsl2与使用libnsl没有本质区别,因此在开发应用程序时需要根据实际情况进行选择。

八、libnsl.so

libnsl.so是libnsl库的一个符号链接文件。从本质上来说,它跟libnsl.so.1文件没有区别,只是为了让用户在不清楚使用的具体版本时,能够链接到当前系统上已经安装的libnsl版本中的一个。

也就是说,如果机器上同时安装了多个版本的libnsl,那么在编译链接时可以使用libnsl.so来获得与当前目标系统匹配的版本,而不必指定精确的版本号码。

九、libnsl.so.1 cannot open

当某个程序需要用到libnsl.so.1时,出现“libnsl.so.1 cannot open”错误时,这很可能是由于LD_LIBRARY_PATH路径没有设置导致的。Linux系统默认情况下只在/usr/lib和/lib/路径下查找链接库文件,而许多应用程序需要调用的库文件通常位于其他路径下。

解决方法之一是在终端中使用以下命令将程序所需的链接库文件路径加入LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[Library_Path]

其中,[Library_Path]替换为实际的libnsl.so.1目录路径即可。

总结

libnsl作为网络编程的基础库,在许多Linux系统中都有广泛的应用。本文对libnsl的特点、版本、离线安装以及常见问题进行了详细地解析,希望能够帮助到有需要的读者。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)