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

cuxqih21  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(279)

我已经包含了头文件netdb.h,其中包含了getaddrinfo,但是gcc发出了以下警告:

  1. warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
  2. gcc -m32 -static -s -O2 -std=c99 -D_POSIX_C_SOURCE=200112L myprogram.c

如何静态编译丢失的文件?

可能的解决方案:

1.可能是glibc安装缺少静态编译所需的相应目标文件。如果是这种情况,请创建相应的目标文件并在编译时链接它。
1.尝试EGLIBC而不是glibc。
1.我成功地编译了我的程序与dietlibc编译没有任何错误,加上产生的二进制文件是远远小于什么glibc使。

fhity93d

fhity93d1#

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

vs91vp4v

vs91vp4v2#

您可以使用musl库来替换glibc。要使用musl,您可以安装它并使用musl-gcc构建您的软件,或者您可以使用使用musl的Linux发行版,例如Alpine Linux。
在我的例子中,为了保存时间,我选择了Alpine Linux来构建我的程序(https://github.com/zhanxw/rvtests),因为我不想构建多个编译器(gcc、g++和gfortran)。

a6b3iqyw

a6b3iqyw3#

我认为某些特性依赖于动态加载程序在运行时解决问题。

相关问题