【问题标题】:How to you compile glibc (32-bit and 64-bit)?如何编译 glibc(32 位和 64 位)?
【发布时间】:2023-03-03 19:25:01
【问题描述】:

现在,我的项目中有一个开源依赖库(mylib.a 文件)的修改版本,因此我通过 gcc 命令静态链接它。我收到的错误是...

"statically linked applications require at runtime the shared libraries from the glibc version used for linking"

我的翻译:我的静态依赖库不能动态使用glibc;它还必须被编译和动态链接。因此,我正在尝试编译和静态链接 glibc。

我收集到需要编译它们,将 *.a 库放置在项目内的文件夹中,为包含头文件添加“-I//location//”,以及“-L //location//" 为库本身添加。

但是,对于问题本身...

如何编译 glibc(32 位和 64 位)?

通过开源研究,我找到了这个链接并克隆了 repo,但我找不到任何关于如何实际编译它的文档。

git clone git://sourceware.org/git/glibc.git

欢迎任何想法或建议。

【问题讨论】:

  • 不,您误解了警告。它说“您正在尝试将您的程序与 glibc 静态链接,请注意,它不像大多数人认为的那样工作”。 因此,我正在尝试编译和静态链接 glibc。这是你绝对不应该做的事情。它会浪费你很多时间,并且对警告什么也不做。根本不要使用-static

标签: linux gcc compilation static-libraries glibc


【解决方案1】:

我的翻译:我的静态依赖库不能动态使用glibc;它还必须被编译和动态链接。因此,我正在尝试编译和静态链接 glibc。

作为 n.m.指出,你的翻译是错误的。

您正在尝试链接一个完全静态的可执行文件,而 GLIBC 警告您该可执行文件将无法在安装了不同版本的 GLIBC 的任何机器上正确运行。

与其尝试构建完全静态的可执行文件,不如构建它以使其使用libc.so.6(您仍然可以将mylib.a 链接到此类可执行文件中)。

如果您在链接中添加-static 的原因是您同时拥有libmylib.alibmylib.so,并且希望链接到前者而不是后者,请阅读this answer

【讨论】:

  • 几周前看了这篇评论,我决定掉进编译和静态链接glibc的兔子洞;包括 glibc 的其他第三方分支。由于您的评论,我或多或少找到了一种方法,但最终决定动态链接。编译 glibc 会使我的可执行文件膨胀两倍。谢谢你帮我解决这个问题!
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 2014-01-12
  • 2018-08-04
  • 2014-07-21
  • 1970-01-01
  • 2020-12-26
  • 2017-03-11
  • 2017-01-21
相关资源
最近更新 更多