Nee*_*ran 28 c gcc posix c99 static-linking
我已经包含了标题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
Run Code Online (Sandbox Code Playgroud)
如何静态编译丢失的文件?
可能的解决方案:
可能是glibc安装缺少静态编译所需的相应目标文件.如果是这种情况,请创建相应的目标文件并在编译时链接它.
尝试EGLIBC而不是glibc.
我成功地用dietlibc编译了我的程序,它编译时没有任何错误加上得到的二进制文件比glibc制作的要小得多.
bdo*_*lan 21
glibc使用libnss来支持许多不同的地址解析服务提供程序.遗憾的是,您无法静态链接libnss,因为它加载的提供程序取决于本地系统的配置.
我找到了解决方案:您可以使用musl库替换glibc。要使用musl,您可以安装它并使用musl-gcc来构建软件,也可以使用使用musl的Linux发行版,例如Alpine Linux。
就我而言,为了节省时间,我选择了Alpine Linux来构建程序(https://github.com/zhanxw/rvtests),因为我不想构建多个编译器(gcc,g ++和gfortran)。