创建使用 getaddrinfo 的静态链接二进制文件?

标签 c gcc posix c99 static-linking

我已经包含了 header netdb.h,其中包含 getaddrinfo,但是 gcc 发出此警告:

warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c

我怎样才能静态编译任何丢失的文件?

可能的解决方案:

  1. 可能是 glibc 安装缺少静态编译所需的相应目标文件。如果是这种情况,请创建相应的目标文件并在编译时链接它。

  2. 尝试使用 EGLIBC 而不是 glibc。

  3. 我用 dietlibc 成功编译了我的程序,编译时没有任何错误,而且生成的二进制文件比 glibc 生成的二进制文件小得多。

最佳答案

glibc 使用 libnss 来支持许多不同的地址解析服务提供商。不幸的是,您不能静态链接 libnss,因为它加载的具体提供程序取决于本地系统的配置。

关于创建使用 getaddrinfo 的静态链接二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725255/

相关文章:

c - 在UNIX系统编程中,send和sendto系统调用之间有什么区别?

c - 用 C 读取 PGM 图像

在 %PATH% 中找不到 GCC

macos - 在运行时在Mac OS X上设置进程名称

c - pthread 取消点有什么用?

c - POSIX 保证写入磁盘

c - LD_PRELOAD不会影响RTLD_NOW的dlopen()

c - 释放结构数组

c++ - 如何在 CMake 中指定链接类型?

c - pthread_cleanup_push 和 O2 CFLAGS