编译一个静态二进制文件,该代码中有一个函数gethostbyname

编译一个静态二进制文件,该代码中有一个函数gethostbyname,第1张

编译一个静态二进制文件,该代码中有一个函数gethostbyname

您要的将非常困难。

。基本上,

getaddrinfo
/之下
gethostbyname
是glibc的NSS层。这使系统管理员可以说“使用DNS将主机名解析为IP地址”,或“使用LDAP”,或“不使用除
/etc/hosts
”以外的任何内容。该控件在运行时;sysadmin可以随时更改将主机名解析为IP的方式。

由于这种灵活性,glibc中的所有名称解析调用都使用帮助程序库(基本上是插件)来完成繁琐的解析工作。有一个用于LDAP寻址的共享库,一个用于文件的共享库,一个用于DNS的共享库,一个用于YP的共享库,依此类推。

如果要使程序100%静态链接,则必须转到其他位置(NOT

gethostbyname
)才能将主机名转换为IP地址。您可以使用诸如uDNS之类的解析器库(不是确切的解析器库-
可以使用类似的工具)来执行此 *** 作,但是请记住, 在配置为不使用DNS的系统上,二进制文件做不到正确的事情

相反,我建议您仅使程序保持(技术上)动态链接。如果您真的想确保它可以在任何平台上运行,甚至可以

glibc
附带二进制文件-
尽管这样做需要LGPL一致性。保留此动态链接仅意味着您将无法在
glibc
版本错误的系统上工作-并不是一个巨大的兼容性问题。

说到许可证合规性,值得注意的是,如果您静态链接

glibc
,则很可能必须交付 整个应用程序
的源代码才能符合
glibc
的LGPL许可证。我不是律师,这也不是合格的法律建议,但是阅读LGPL可以很清楚地知道,静态链接的应用程序
glibc
必须是开源的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4959268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存