您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

您要的将非常困难。

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

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

如果要使程序100%静态链接,则必须转到其他位置(NOTgethostbyname)才能将主机名转换为IP地址。您可以使用诸如uDNS之类的解析器库(不是确切的解析器库- 可以使用类似的工具)来执行此操作,但是请记住, !

相反,我建议您仅使程序保持(技术上)动态链接。如果您真的想确保它可以在任何平台上运行,甚至可以glibc附带二进制文件- 尽管这样做需要LGPL一致性。保留此动态链接仅意味着您将无法在glibc版本错误的系统上工作-并不是一个巨大的兼容性问题。

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

其他 2022/1/1 18:13:56 有744人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶