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

时间:2009-07-07 13:48:52

标签: gcc gnu-toolchain

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

每隔一段时间我就会从链接器中收到这些警告......(目前正在使用openssh-5.2p1)

警告类似于: “在静态链接的应用程序中使用'function'需要在运行时使用glibc版本中的共享库...”

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

谢谢, Chenz

1 个答案:

答案 0 :(得分:5)

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

其中一些是nsswitch,参见例如/etc/nsswitch.conf。在系统中,可以通过插件配置和更改查找用户/组/主机名和其他内容的不同方式 - 例如samba附带一个模块,用于透明地管理在Windows域/活动目录上配置的用户。

如果您静态链接到glibc,/etc/nsswitch.confgethostbyname等功能,您的应用将不会尊重getpwuid自定义,而其他人只会使用查找内容的默认方式。

同样适用于您的应用程序可能使用的其他库,无论出于何种原因dlopen()s本身都可以挂钩到glibc或类似的。

另见

Statically linking considered harmful