构建不需要最新 glibc 的软件的最佳方法是什么?
我正在尝试构建一个可以在多个 Linux 发行版上运行的二进制包。它目前在 Ubuntu 10.04 上构建,但在 Ubuntu 8.04 上失败并出现以下错误:
./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./test)
./test: /usr/lib/libstdc.so.6: version `GLIBC_2.11' not found (required by ./test)
解决此问题的首选方法是什么?有没有办法在新机器上安装旧的 glibc 并针对它进行构建,或者我是否必须在旧的发行版上构建?如果我针对旧的 glibc 进行构建,它可以在新的 glibc 上运行吗?
或者,是否可以安装一些方便的编译器标志或软件包来解决问题?
I'm attempting to build a binary package that can be run on multiple Linux distributions. It's currently built on Ubuntu 10.04, but it fails on Ubuntu 8.04 with the following error:
./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./test)
./test: /usr/lib/libstdc.so.6: version `GLIBC_2.11' not found (required by ./test)
What's the preferred way to solve this problem? Is there a way to install an old glibc on a new box and build against it, or do I have to build on an old distribution? And if I build against an old glibc, will it work on a new glibc?
Or, alternatively, are there just some handy compiler flags or packages I could install to solve the problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我发现的最佳解决方案是安装运行 Debian 稳定版的虚拟机,并在此基础上进行构建。 Debian stable 已经足够老了,用它构建的任何软件包都可以在任何其他基于 Debian 的发行版(例如 Ubuntu)上运行。您可能需要解决一些非关键错误,这些错误已在各种软件的更高版本中修复,但未向后移植到 Debian 稳定版。
The best solution I've found is to install a virtual machine running Debian stable, and build on that. Debian stable is old enough that any packages built with it will run on any other Debian-based distribution like Ubuntu. You may have to work around non-critical bugs that have been fixed in later versions of various software but not backported to Debian stable.
如果您确实想确保它在每个最近的发行版上运行,您还可以考虑静态链接您选择的 libC。但是,如果您使用仅由较新的内核提供的功能(例如较新的系统调用),您可能仍然会遇到问题。
If you really want to make sure it runs on every recent distribution, you might also consider statically linking against a libC you select. However you may then still run into problems if you use features that are only provided by newer kernels (newer system calls e.g.).