2009-07-07 86 views
3

为什么我的静态构建需要共享库?为什么我的静态构建需要共享库?

几乎每隔一段时间,我从我的链接这些警告...

的警告看起来类似于(目前它在OpenSSH-5.2p1发生): “在静态链接的应用程序中使用‘功能’需要在运行时从glibc版本共享库用于...“

当我谷歌,我只看到修复,而不是原因。

感谢, Chenz

回答

3

它不需要共享库本身,它只是警告你,如果你静态链接到glibc的一些事情可能无法正常工作。

其中一些东西是nSwitch,例如见。 /etc/nsswitch.conf。在一个系统中,查找用户/组/主机名和其他东西的不同方法可以通过插件进行配置和修改 - 例如, samba提供了一个模块,用于管理透明地在Windows域/活动目录中配置的用户。

如果您静态链接到glibc,您的应用程序将不会执行/etc/nsswitch.conf定制,诸如gethostbyname,getpwuid和其他功能的函数将只使用默认的查找方式。

同样适用于例如其他库你的应用程序可能会使用它,无论出于何种原因dlopen()本身钩入glibc或类似的。

又见

Statically linking considered harmful