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

标签 gcc gnu-toolchain

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

我经常从链接器处收到这些警告...(目前 openssh-5.2p1 上出现这种情况)

警告看起来类似于: “在静态链接的应用程序中使用‘函数’需要在运行时使用 glibc 版本中的共享库来...”

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

谢谢, 陈兹

最佳答案

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

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

如果您静态链接到 glibc、gethostbynamegetpwuid 等函数,您的应用将不支持 /etc/nsswitch.conf 自定义其他人只会使用默认的查找方式。

同样适用于例如您的应用程序可能出于某种原因使用 dlopen()s 本身来 Hook glibc 或类似的其他库。

另请参阅

Statically linking considered harmful

关于gcc - 为什么我的静态构建需要共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092456/

相关文章:

embedded - arm-linux-gcc 与 arm-elf-gcc

c++ - 在代码中执行自定义规则 (C/C++)

c++ - 针对 libx264 的链接不起作用 (Cygwin)

c - Ubuntu/linux 中 eclipse IDE 中的 OpenMP for C

windows - 在 Windows 上是否有可以与 C 和 Perl 一起使用的**轻量级** IDE?

linker-errors - "file not recognized"使用 GNU 链接器时

debugging - 构建 Linux 内核镜像 (vmlinux) 以使用 DWARF3 而不是 DWARF4

c - 标准输入 C : Incorrect string if $ is present

c++ - 当我的代码被 GCC 编译时内存泄漏

gcc - 为-Wimplicit-interface禁用-Werror