自动链接* nix中的套接字共享库

时间:2012-03-02 13:30:06

标签: c linux network-programming solaris

我正在通过此链接http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html中的示例源代码学习网络编程。在编译期间,只是想知道为什么在Solaris环境中,我必须手动链接make文件中的socket和nsl库,但是当在linux机器中时,我不需要这样做吗?

2 个答案:

答案 0 :(得分:6)

使用的文档:http://developers.sun.com/solaris/articles/solaris_linux_app.html

这是因为linux的libc,glibc(-lc,默认链接到所有程序)包括POSIX的套接字部分; Linux中的nis/nis+动态库也是由libc动态加载的。

但在Solaris中,有许多具有基本功能的库,这些库不在libc中。 (libc,libucb,libmalloc,libsocket,libxnet等)。我认为,这是一个设计解决方案,允许用户只链接他需要的API部分。

在linux中,libc之外还有一些基本库:libaio,librt,libm。

使用单独的库,更容易更新系统的某些部分;并且可以在同一系统中共存一些库的多个实现(例如,为旧版UNIX提供更好的兼容性/变通方法)。

这个问题经过了很多讨论,例如: http://web.archiveorange.com/archive/v/KcxCHdLNpD6NANxmAt3b http://mail.opensolaris.org/pipermail/opensolaris-code/2007-January/010316.html

  
    

正在认真考虑将libnsl和libsocket折叠成libc。

  
     

仅移动当前基于POSIX和其他的将是很好的   基于标准的功能(Unix98等)libnsl + libsocket函数   到libc并保留libnsl / libsocket中的所有兼容包装东西   为了避免libc在20年的Unix中变得臃肿   向后兼容性解决方法

答案 1 :(得分:2)

因为在Linux中,整个网络API在libc.so中实现,默认情况下链接到每个C程序,而在Solaris中,它在不同的库中实现。