dsi*_*cha 15 linux linker static-linking
我正在尝试使用GCC编译静态链接的二进制文件,我收到的警告信息如下:
warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
Run Code Online (Sandbox Code Playgroud)
我甚至不知道是什么getwnam_r,但我认为它是从一些更高级别的API内部调用的.我收到了类似的消息gethostbyname.
为什么不可能像其他所有函数一样静态链接这些函数?
thi*_*ton 25
需要访问NSS或iconv的函数调用需要访问才能动态打开其他库,因为NSS需要插件才能工作(辅助模块如pam_unix.so).当NSS系统使这些模块崩溃时,将会有两个冲突版本的glibc - 你的程序带来的那个(静态编译),以及dlopen()NSS依赖的版本.狗屎会发生.
这就是为什么你不能使用getpwnam_r和一些其他函数来构建静态程序的原因.