在*nix系统中自动链接套接字共享库

4
2个回答

7

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

这是因为Linux的libc,glibc(-lc,默认链接到所有程序)包括POSIX的socket部分; 而在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等)移动到libc中,将所有兼容性包装器的内容保留在libnsl / libsocket中,以避免libc因20年的Unix向后兼容性工作而变得臃肿。

谢谢您的出色回答。我也相信在Solaris系统中,他们试图尽可能地使应用程序变小,因此他们更喜欢使用动态链接(http://pages.cs.wisc.edu/~thomas/X/static-linking.html)。 - Thai Tran

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接